**********************************************************
*Cloture de la paie
*Programme chaine  partir d'un projet VB
*Vanessa
*
*GESTION DES CONGES (MENSUEL ET BASCULEMENT)
*STEPHANE
**********************************************************

**********************************************************
* RECAPITULATIF DES CORRECTIONS

* 22/05/01 -> INTEGRATION DE LA GESTION DE CONGES FRACT. + ANC. AVANT PRISE DES CONGES EN COURS ACQ.
* 28/02/01 -> CORRECTION BUG SUR SOLDE DES CONGES LORS DE CONGES POUR SOLDE
* 30/01/01 -> CORRECTION BUG SUR VALORISATION NB JOURS SUSP. CONTRAT (ATT.70)

**********************************************************
* RECAPITULATIF DES GOSUB

* 10  -> MAJ DU FICHIER HISTORCUMUL
* 11  -> GESTION DES TRANCHES B + C DANS HISTORCUMUL
* 50  -> MAJ DES CONGES PAYES
* 60  -> RECHERCHE DU NOMBRE DE JOURS DE CONGES
* 70  -> MAJ DES COMPTEURS DE CONGES
* 80  -> CALCUL DU TAUX HORAIRE + COEFFICIENT
* 100 -> MAJ DES CONGES EN-COURS D'ACQUISITION
* 200 -> GESTION DES ABSENCES
* 300 -> CALCUL DU NOMBRE DE JOURS D'ABSENCES (HORS MALADIE)
* 301 -> CALCUL DES DROITS AUX CONGES (TYPE 12 OU 13)
* 302 -> CALCUL DU NOMBRE CUMULE DE JOURS D'ABSENCES (JUIN->MAI)
* 303 -> CALCUL DU NOMBRE DE JOURS D'ABSENCES MALADIE
* 310 -> CALCUL DES DROITS AUX CONGES (MALADIE)
* 320 -> CALCUL DES DROITS AUX CONGES <> 01,12,13
* 500 -> GESTION DE BASCULEMENT DES COMPTEURS
* 600 -> GESTION DE BASCULEMENT DES COMPTEURS DE CONGES PAYES
* 700 -> GESTION DE BASCULEMENT DES COMPTEURS DE CONGES ANCIENNETE
* 800 -> GESTION DE BASCULEMENT DES COMPTEURS DE CONGES FRACTIONNEMENT
* 900 -> GESTION DES EFFECTIFS
* 901 -> RECHERCHE SI ETABLISSEMENT DEJA TRAITE
* 910 -> MAJ DU FICHIER ETABLISSEMENT
* 920 -> MAJ DU FICHIER ASSOCIATION

* 2000 --> Controles pour cration d'un nouveau DtailPrest (JEROME)
* 2001 --> Cration du nouveau DtailPrest suite  ensemble des controles valide (JEROME)
* 2010 --> Purge DETAILPREST, DETAILMANDAT & DETAILINTER si Priode < PriodePaie (JEROME)
* (60) --> Purge du DETAILADMIN aprs traitement (JEROME)
* 2050 --> RECHERCHE SI CONTRAT TOUJOURS EN COURS SUR MOIS SUIVANT...
* 2100 --> Controle pour cration DETAILADMIN, DETAILPREST, DETAILMANDAT & DETAILINTER (JEROME)
* 2101 --> cration DETAILADMIN  (JEROME)
* 2102 --> cration DETAILMANDAT (JEROME)
* 2103 --> cration DETAILPREST  (JEROME)
* 2104 --> cration DETAILINTER  (JEROME)
* 2200 --> PURGE DES FICHIERS ANOMALIESPAIE + ACOMPTEBULL

* Ouvertures des fichiers
EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
OPEN "","CONTRAT" TO F.CONTRAT ELSE PRINT "OUVERTURE CONTRAT" ;* en criture
OPEN "","DETAILCALCUL" TO F.DETAILCALCUL ELSE PRINT "OUVERTURE DETAILCALCUL" ;* en lecture
OPEN "","HISTORCUMUL" TO F.HISTORCUMUL ELSE PRINT "OUVERTURE HISTORCUMUL" ;* en criture
OPEN "","ACOMPTEBULL" TO F.ACOMPTEBULL ELSE PRINT "OUVERTURE ACOMPTEBULL" ;* en suppression
OPEN "","RUBSAISIE" TO F.RUBSAISIE ELSE PRINT "OUVERTURE RUBSAISIE" ;* en lecture
OPEN "","RUBCHARGE" TO F.RUBCHARGE ELSE PRINT "OUVERTURE RUBCHARGE" ;* en lecture
OPEN "","ABSENCESAIDANT" TO F.ABSENCESAIDANT ELSE STOP 
OPEN "","CONVENTIONCOL" TO F.CONVENTIONCOL ELSE STOP
OPEN "","ETABLISSEMENT" TO F.ETABLISSEMENT ELSE STOP
OPEN "","ASSOCIATION" TO F.ASSOCIATION ELSE STOP
OPEN "","DETAILADMIN" TO F.DETAILADMIN ELSE STOP
OPEN "","DETAILINTER" TO F.DETAILINTER ELSE STOP
OPEN "","DETAILMANDAT" TO F.DETAILMANDAT ELSE STOP
OPEN "","DETAILPREST" TO F.DETAILPREST ELSE STOP
OPEN "","ANOMALIEPAIE" TO F.ANOMALIEPAIE ELSE STOP
OPEN "","GRILLESCC" TO F.GRILLESCC ELSE STOP
OPEN "","PERIODESPAIE" TO F.PERIODESPAIE ELSE STOP
OPEN "","ACTIVITES" TO F.ACTIVITE ELSE STOP
OPEN "","PROFIL" TO F.PROFIL ELSE STOP
OPEN "","TRANCHE" TO F.TRANCHE ELSE STOP
OPEN "","RATTSALANT" TO F.RATTSALANT ELSE STOP
OPEN "","CONSTANTESPAIE" TO F.CONSTANTESPAIE ELSE STOP

* SPECIF TROYES
OPEN "","DETAILFEDE" TO F.DETAILFEDE ELSE PRINT ""

*********************************************************
* Recuperation des arguments
PROCREAD ARGUMENTS ELSE STOP
W_RangPeriode=INDEX(ARGUMENTS," ",1)
W_PERIODEFACT=ARGUMENTS[W_RangPeriode+1,6]
W_Nom=INDEX(ARGUMENTS," ",2)
W_RequeteContrat=ARGUMENTS[W_Nom+1,999]
*********************************************************

W_EURO=0

* REGARDE SI TRAITEMENT EN EUROS
READ ENR_CONSTANTESPAIE FROM F.CONSTANTESPAIE,"1" ELSE STOP
READ ENR_PERIODESPAIE FROM F.PERIODESPAIE,"1" ELSE STOP

IF INT(ICONV("01/":ENR_PERIODESPAIE<1>[5,2]:"/":ENR_PERIODESPAIE<1>[1,4],"D4/"))>=INT(ENR_CONSTANTESPAIE<9>) THEN
   W_PASSAGEEURO=1
   W_EURO="6,55957"
END ELSE
   W_PASSAGEEURO=0
END

* Requete sur CONTRAT
  W_EFFECTIFPHYSIQUE=""
  W_EFFECTIFTP=""
  W_EFFECTIFPHYSIQUETOTAL=0
  W_EFFECTIFTPTOTAL=0
  W_HORAIRETP=""
  W_HORAIREHEBDO=""
  W_ETABLISSEMENT=""
  W_NBETABLISSEMENT=0
  W_HEURESARRET=0
  W_RUBAFFECT=""
  W_CODEABSENCE=""
  W_NBJOURABS2=0

* INITIALISE LES LISTES A VIDE
LISTEABSENCESAIDANT=""
LISTANOMALIEPAIE=""
LISTACOMPTEBULL=""
LISTEMALADIEAIDANT=""
REQUETECONTRAT=""
REQUETEDETAIL=""

  W_Fini="FAUX"
   EXECUTE W_RequeteContrat
   EXECUTE 'SAUVE-LISTE REQUETECONTRAT'
   EXECUTE 'LISTE REQUETECONTRAT' CAPTURING MSG RETURNING MSGCODE

   IF MSGCODE<1>=209 THEN 
        STOP
   END

   SELECT F.CONTRAT TO REQUETECONTRAT
	
	* SAUVEGARDE PROCHAINE PERIODE DE TRAITEMENT POUR REMPLISSAGE AUTO DETAILXXXX
	* JEROME
	W_PROCHAINEPERIODE=W_PERIODEFACT+1
	IF W_PROCHAINEPERIODE[5,2]="13" THEN
		W_PROCHAINEPERIODE=W_PROCHAINEPERIODE[1,4]+1:"01"
	END

   LOOP
      READNEXT W_CleContrat FROM REQUETECONTRAT ELSE W_Fini="VRAI"
	
	DELETE F.RATTSALANT,W_CleContrat

      W_AFFECTCONGESMOIS="FAUX"
      W_CODEAIDANT=W_CleContrat[1,5]

   WHILE W_Fini="FAUX" DO
      READ ENR_CONTRAT FROM F.CONTRAT,W_CleContrat ELSE ENR_CONTRAT="" 
      IF ENR_CONTRAT<81><>"" THEN
          GOSUB 10 
          ENR_CONTRAT<63>=ENR_CONTRAT<81>
          ENR_CONTRAT<81>=""
      END

      READ ENR_CONVENTIONCOL FROM F.CONVENTIONCOL,ENR_CONTRAT<1> ELSE ENR_CONVENTIOLCOL=""

      W_PERIODE=W_PERIODEFACT
      W_CODECONTRAT=W_CleContrat
      W_CODECONVENTION=ENR_CONTRAT<1>
      W_DEBUTCONTRAT=ENR_CONTRAT<7>
      W_DEBUTCONTRATANC=ENR_CONTRAT<97>
      W_ASSOCIATION=ENR_CONTRAT<2>

      W_JOURCONGESCP=0
      W_JOURCONGESCA=0
      W_JOURCONGESCPS=0
      W_JOURCONGESCF=0
      W_ANCIENCODE=""

      GOSUB 50

      GOSUB 80

      GOSUB 2200

      ENR_CONTRAT<46>=INT(ENR_CONTRAT<46>+1/2)

      W_AVENANT=DCOUNT(EXTRACT(ENR_CONTRAT,15),CHAR(253))
      IF ENR_CONTRAT<68,W_AVENANT>="1" THEN
	   IF ENR_CONTRAT<1>#"02" THEN	
     	      READ ENR_ETABLISSEMENT FROM F.ETABLISSEMENT,ENR_CONTRAT<3> THEN
		W_FINMODUL=ENR_ETABLISSEMENT<24>
		IF W_FINMODUL=W_PERIODE[5,2] THEN
		     ENR_CONTRAT<71>=ENR_CONTRAT<76>
		     ENR_CONTRAT<72>=ENR_CONTRAT<77>
		     ENR_CONTRAT<73>=ENR_CONTRAT<78>
		     ENR_CONTRAT<74>=ENR_CONTRAT<79>
		     ENR_CONTRAT<75>=ENR_CONTRAT<80>
		     ENR_CONTRAT<76>=""
		     ENR_CONTRAT<77>=""
		     ENR_CONTRAT<78>=""
		     ENR_CONTRAT<79>=""
		     ENR_CONTRAT<80>=""
		END
	      END
	   END
      END ELSE
	 READ ENR_ASSOCIATION FROM F.ASSOCIATION,ENR_CONTRAT<2> THEN
	   IF ENR_ASSOCIATION<25>="1" THEN
		IF W_PERIODE[5,2]="11" THEN
		     ENR_CONTRAT<71>=ENR_CONTRAT<76>
		     ENR_CONTRAT<72>=ENR_CONTRAT<77>
		     ENR_CONTRAT<73>=ENR_CONTRAT<78>
		     ENR_CONTRAT<74>=ENR_CONTRAT<79>
		     ENR_CONTRAT<75>=ENR_CONTRAT<80>
		     ENR_CONTRAT<76>=""
		     ENR_CONTRAT<77>=""
		     ENR_CONTRAT<78>=""
		     ENR_CONTRAT<79>=""
		     ENR_CONTRAT<80>=""
		END
	   END ELSE
		IF W_PERIODE[5,2]="12" THEN
		     ENR_CONTRAT<71>=ENR_CONTRAT<76>
		     ENR_CONTRAT<72>=ENR_CONTRAT<77>
		     ENR_CONTRAT<73>=ENR_CONTRAT<78>
		     ENR_CONTRAT<74>=ENR_CONTRAT<79>
		     ENR_CONTRAT<75>=ENR_CONTRAT<80>
		     ENR_CONTRAT<76>=""
		     ENR_CONTRAT<77>=""
		     ENR_CONTRAT<78>=""
		     ENR_CONTRAT<79>=""
		     ENR_CONTRAT<80>=""
		END
	   END
         END
      END				     

      * CREATION DE DETAILXXXXX SUIVANT		
      GOSUB 2100

      WRITE ENR_CONTRAT ON F.CONTRAT,W_CleContrat

      IF W_CODECONVENTION<>"02" AND ENR_CONTRAT<13><>"CEC" AND ENR_CONTRAT<13><>"CES" AND ENR_CONTRAT<13><>"CEV" THEN
           GOSUB 900
      END

      GOSUB 100

      GOSUB 500
   REPEAT

   I=1
   LOOP
	UNTIL W_HORAIRETP<I>="" DO
	W_EFFECTIFTP<I>=W_EFFECTIFTP<I>+INT((W_HORAIRETP<I>/W_HORAIREHEBDO<I>)*100+1/2)
	I=I+1
   REPEAT

   IF W_NBETABLISSEMENT="" OR W_NBETABLISSEMENT=0 THEN
      W_NBETABLISSEMENT=DCOUNT(W_ETABLISSEMENT,CHAR(254))
   END

   * MAJ DES ETABLISSEMENT
   GOSUB 910

   * MAJ DE L'ASSOCIATION
   GOSUB 920

   EXECUTE "EFFACER-LISTE LISTEABSENCESAIDANT"
   EXECUTE "EFFACER-LISTE LISTEMALADIEAIDANT"
   EXECUTE "EFFACER-LISTE REQUETECONTRAT"

	* Purge des fichiers
	GOSUB 2010

STOP

*********************************************************
*********************************************************
* MAJ du fichier HISTORCUMUL

10
  W_CodeAidant=W_CleContrat
  W_ENTREESURMOIS="NON"
  W_DATEDEBCONTRAT=ENR_CONTRAT<7>
  W_DATEDEBCONTRAT=OCONV(W_DATEDEBCONTRAT,"D4 ")
  W_DATEDEBCONTRAT=W_DATEDEBCONTRAT[7,4]:W_DATEDEBCONTRAT[4,2]
  IF W_DATEDEBCONTRAT=W_PERIODEFACT THEN W_ENTREESURMOIS="OUI"

  * test si dcallage de paie
  READ ENR_ASSOCIATION FROM F.ASSOCIATION,ENR_CONTRAT<2> ELSE ENR_ASSOCIATION="" 
  IF ENR_ASSOCIATION<25> = "1" AND ENR_CONTRAT<1> # "02" AND ENR_CONTRAT<81>[5,2] = "12" THEN
     W_CodeAnnee=ENR_CONTRAT<81>[1,4] + 1
  END ELSE
     W_CodeAnnee=ENR_CONTRAT<81>[1,4]
  END

  IF ENR_CONTRAT<1>="02" THEN
     W_CleHistorCumul=W_CodeAidant[1,5]:W_CodeAnnee:ENR_CONTRAT<3>
  END ELSE 
     W_CleHistorCumul=W_CodeAidant[1,5]:W_CodeAnnee:ENR_CONTRAT<2>
  END

  READ ENR_HISTORCUMUL FROM F.HISTORCUMUL,W_CleHistorCumul ELSE ENR_HISTORCUMUL=""
  IF ENR_HISTORCUMUL="" THEN W_ENTREESURMOIS="OUI"
  IF ENR_HISTORCUMUL#"" THEN W_ENTREESURMOIS="NON"

  IF ENR_HISTORCUMUL<11>="" AND ENR_CONTRAT<7> >= ICONV("01/01/":W_CodeAnnee[1,4],"D4/") AND ENR_CONTRAT<7> <= ICONV("31/12/":W_CodeAnnee[1,4],"D4/") THEN
     ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,11;ENR_CONTRAT<7>)
  END
  IF ENR_HISTORCUMUL<12>="" AND ENR_CONTRAT<8> >= ICONV("01/01/":W_CodeAnnee[1,4],"D4/") AND ENR_CONTRAT<8> <= ICONV("31/12/":W_CodeAnnee[1,4],"D4/") THEN
     ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,12;ENR_CONTRAT<8>)
  END
  IF ENR_HISTORCUMUL<12> # "" AND ENR_CONTRAT<7> # ENR_HISTORCUMUL<11> AND ENR_CONTRAT<7> >= ICONV("01/01/":W_CodeAnnee[1,4],"D4/") AND ENR_CONTRAT<7> <= ICONV("31/12/":W_CodeAnnee[1,4],"D4/") THEN
     ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,13;ENR_CONTRAT<7>)
  END
  IF ENR_HISTORCUMUL<12> # "" AND ENR_CONTRAT<8> # ENR_HISTORCUMUL<12> AND ENR_CONTRAT<8> >= ICONV("01/01/":W_CodeAnnee[1,4],"D4/") AND ENR_CONTRAT<8> <= ICONV("31/12/":W_CodeAnnee[1,4],"D4/") THEN
     ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,14;ENR_CONTRAT<8>)
  END

  READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CleContrat:ENR_CONTRAT<81> ELSE ENR_DETAILCALCUL="" 
  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,2;ENR_HISTORCUMUL<2>+ENR_DETAILCALCUL<6>)

  IF ENR_DETAILCALCUL<6> >= 6000 THEN
     W_Mois=ENR_CONTRAT<81>
     ENR_HISTORCUMUL<3>=W_Mois[5,2]
  END

  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,4;ENR_HISTORCUMUL<4>+ENR_DETAILCALCUL<29>)
  W_CumulBrut=ENR_HISTORCUMUL<5>
  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,5;ENR_HISTORCUMUL<5>+ENR_DETAILCALCUL<7>)
  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,6;ENR_HISTORCUMUL<6>+ENR_DETAILCALCUL<15>)
  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,7;ENR_HISTORCUMUL<7>+ENR_DETAILCALCUL<16>)

  W_Temp=DCOUNT(ENR_DETAILCALCUL<2>,CHAR(253))

  FOR i=1 TO W_Temp
     
     READ ENR_RUBSAISIE FROM F.RUBSAISIE,ENR_DETAILCALCUL<2,i> ELSE ENR_RUBSAISIE="" 

     IF ENR_RUBSAISIE<2>="3" OR ENR_RUBSAISIE<2>="4" THEN
        ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,1;ENR_HISTORCUMUL<1>+ENR_DETAILCALCUL<3,i>)
     END

     IF ENR_RUBSAISIE<2>="0" THEN
        ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,8;ENR_HISTORCUMUL<8>+ENR_DETAILCALCUL<5,i>)

        W_Count=DCOUNT(ENR_HISTORCUMUL<9>,CHAR(253))
	IF W_Count < 4 THEN
           W_Passe="FALSE"
           FOR j=1 TO W_Count
               IF ENR_RUBSAISIE<3>=ENR_HISTORCUMUL<9,j> THEN
                   W_Passe="TRUE"
               END 
           NEXT j 
           IF W_Passe="FALSE" THEN
	     ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,9,W_Count+1;ENR_RUBSAISIE<3>)
	   END
 	END

     END
  NEXT i

  W_Temp=DCOUNT(ENR_DETAILCALCUL<17>,CHAR(253))

  FOR i=1 TO W_Temp
     READ ENR_RUBSAISIE FROM F.RUBSAISIE,ENR_DETAILCALCUL<17,i> ELSE ENR_RUBSAISIE="" 
     IF ENR_RUBSAISIE<2>="2" THEN
        ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,10;ENR_HISTORCUMUL<10>+ENR_DETAILCALCUL<20,i>)
     END
  NEXT i
  
  i=1
  W_ENRHISTORCUMUL=""
  W_Count=DCOUNT(ENR_HISTORCUMUL<15>,CHAR(253))
  FOR j=1 TO W_Count
   W_ENRHISTORCUMUL<1,j>=""
  NEXT j
  W_BASEURSSAFTOT=0
  W_BASEURSSAFPLAF=0
  W_CUMASSURSSAFTOT=0
  W_CUMASSURSSAFPLAF=0
  LOOP
  WHILE ENR_DETAILCALCUL<8,i> # "" DO
      j=1
      LOOP
      WHILE ENR_DETAILCALCUL<8,i> # ENR_HISTORCUMUL<15,j> AND ENR_HISTORCUMUL<15,j> # "" DO
          IF W_CUMASSURSSAFPLAF=0 OR W_CUMASSURSSAFTOT=0 THEN
            READ ENR_RUBCHARGE FROM F.RUBCHARGE,ENR_HISTORCUMUL<15,j> ELSE ENR_RUBCHARGE="" 
            IF ENR_RUBCHARGE<16>="01" THEN
	      READ ENR_TRANCHE FROM F.TRANCHE,ENR_RUBCHARGE<2> ELSE ENR_TRANCHE=""
              IF ENR_TRANCHE<10>="02" THEN
                IF W_CUMASSURSSAFPLAF=0 THEN W_CUMASSURSSAFPLAF=ENR_HISTORCUMUL<16,j>
              END
	      IF ENR_TRANCHE<10>="01" THEN
                IF W_CUMASSURSSAFTOT=0 THEN W_CUMASSURSSAFTOT=ENR_HISTORCUMUL<16,j>
              END
            END
          END        
	  j=j+1
      REPEAT

      READ ENR_RUBCHARGE FROM F.RUBCHARGE,ENR_DETAILCALCUL<8,i> ELSE ENR_RUBCHARGE=""     
      IF ENR_RUBCHARGE<16>="01" THEN
	 READ ENR_TRANCHE FROM F.TRANCHE,ENR_RUBCHARGE<2> ELSE ENR_TRANCHE=""
	 IF ENR_TRANCHE<10>="02" THEN
            IF W_BASEURSSAFPLAF=0 THEN W_BASEURSSAFPLAF=ENR_DETAILCALCUL<28,i>
         END
	 IF ENR_TRANCHE<10>="01" THEN
            IF W_BASEURSSAFTOT=0 THEN W_BASEURSSAFTOT=ENR_DETAILCALCUL<28,i>
         END
      END

      IF ENR_DETAILCALCUL<8,i>=ENR_HISTORCUMUL<15,j> THEN
          W_ENRHISTORCUMUL<1,j>="1"
          IF ENR_RUBCHARGE<16>="01" THEN
             IF ENR_TRANCHE<10>="02" THEN
                IF W_CUMASSURSSAFPLAF=0 THEN W_CUMASSURSSAFPLAF=ENR_HISTORCUMUL<16,j>
             END
	     IF ENR_TRANCHE<10>="01" THEN
                IF W_CUMASSURSSAFTOT=0 THEN W_CUMASSURSSAFTOT=ENR_HISTORCUMUL<16,j>
             END
          END
  	  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,16,j;ENR_HISTORCUMUL<16,j>+ENR_DETAILCALCUL<28,i>)
	  IF ENR_DETAILCALCUL<9,i>="" THEN  
 	       ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,j;ENR_HISTORCUMUL<17,j>+ENR_DETAILCALCUL<12,i>)
	  END ELSE
	       ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,j;ENR_HISTORCUMUL<17,j>+ENR_DETAILCALCUL<9,i>)
	  END
  	  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,18,j;ENR_HISTORCUMUL<18,j>+ENR_DETAILCALCUL<11,i>)
  	  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,19,j;ENR_HISTORCUMUL<19,j>+ENR_DETAILCALCUL<14,i>)
      END ELSE	
          IF ENR_HISTORCUMUL<15,j> = "" THEN
	      W_Count=DCOUNT(ENR_HISTORCUMUL<15>,CHAR(253))
	      ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,15,W_Count+1;ENR_DETAILCALCUL<8,i>)
              W_ENRHISTORCUMUL<1,W_Count+1>="0"	      

	      IF ENR_RUBCHARGE<18>="3" THEN
                   IF ENR_RUBCHARGE<16>="01" THEN
	              ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,16,W_Count+1;ENR_DETAILCALCUL<28,i>)
	              IF ENR_DETAILCALCUL<9,i>="" THEN
	                 ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,W_Count+1;ENR_DETAILCALCUL<12,i>)
                      END ELSE
	                 ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,W_Count+1;ENR_DETAILCALCUL<9,i>)
                      END
                   END ELSE
	              ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,16,W_Count+1;W_CumulBrut+ENR_DETAILCALCUL<28,i>)
	              IF ENR_DETAILCALCUL<9,i>="" THEN
	                 ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,W_Count+1;W_CumulBrut+ENR_DETAILCALCUL<12,i>)
                      END ELSE
	                 ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,W_Count+1;W_CumulBrut+ENR_DETAILCALCUL<9,i>)
                      END
                   END
	      END ELSE
	           ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,16,W_Count+1;ENR_HISTORCUMUL<16,W_Count+1>+ENR_DETAILCALCUL<28,i>)
	           IF ENR_DETAILCALCUL<9,i>="" THEN
	              ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,W_Count+1;ENR_HISTORCUMUL<17,W_Count+1>+ENR_DETAILCALCUL<12,i>)
                   END ELSE
	              ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,W_Count+1;ENR_HISTORCUMUL<17,W_Count+1>+ENR_DETAILCALCUL<9,i>)
                   END
  	      END
	      ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,18,W_Count+1;ENR_HISTORCUMUL<18,W_Count+1>+ENR_DETAILCALCUL<11,i>)
  	      ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,19,W_Count+1;ENR_HISTORCUMUL<19,W_Count+1>+ENR_DETAILCALCUL<14,i>)
	  END
      END		
      i=i+1	
  REPEAT

* MAJ CUMUL D'ASSIETTE BRUTE (ATT 16 D'HISTORCUMUL) POUR RUBRIQUE URSSAF NON PRESENTE DANS
* FICHIER DETAILCALCUL
  W_Count=DCOUNT(W_ENRHISTORCUMUL<1>,CHAR(253))
  FOR j=1 TO W_Count
     IF W_ENRHISTORCUMUL<1,j>#"1" THEN
        READ ENR_RUBCHARGE FROM F.RUBCHARGE,ENR_HISTORCUMUL<15,j> ELSE ENR_RUBCHARGE=""
        IF ENR_RUBCHARGE<16>="01" THEN
	   READ ENR_TRANCHE FROM F.TRANCHE,ENR_RUBCHARGE<2> THEN
	      IF ENR_TRANCHE<10>="02" THEN
                 D=1
                 LOOP
                  UNTIL ENR_DETAILCALCUL<49,D>="" OR ENR_DETAILCALCUL<49,D>=ENR_HISTORCUMUL<15,j> DO
                   D=D+1
                 REPEAT
                 IF ENR_DETAILCALCUL<49,D>="" THEN
                  IF W_ENRHISTORCUMUL<1,j>="0" THEN
                     IF W_ENTREESURMOIS="NON" THEN ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,16,j;W_CUMASSURSSAFPLAF+W_BASEURSSAFPLAF)
                  END ELSE
                     ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,16,j;ENR_HISTORCUMUL<16,j>+W_BASEURSSAFPLAF)
                  END
                 END
              END
	      IF ENR_TRANCHE<10>="01" THEN
                 D=1
                 LOOP
                  UNTIL ENR_DETAILCALCUL<49,D>="" OR ENR_DETAILCALCUL<49,D>=ENR_HISTORCUMUL<15,j> DO
                   D=D+1
                 REPEAT
                 IF ENR_DETAILCALCUL<49,D>="" THEN
                  IF W_ENRHISTORCUMUL<1,j>="0" THEN
                     IF W_ENTREESURMOIS="NON" THEN ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,16,j;W_CUMASSURSSAFTOT+W_BASEURSSAFTOT)
                  END ELSE
                     ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,16,j;ENR_HISTORCUMUL<16,j>+W_BASEURSSAFTOT)
                  END
                 END
              END
           END
        END
     END	 
  NEXT j

  W_RUBAFFECT=""
  * MAJ HISTORCUMUL POUR RUBRIQUES DE CHARGE A 0 (ATT 49 ET 50 DE DETAILCALCUL)
   GOSUB 11

  IF ENR_HISTORCUMUL<8> = "" THEN
     ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,8;"0")
  END 

  IF ENR_HISTORCUMUL<10> = "" THEN
     ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,10;"0")
  END 

  WRITE ENR_HISTORCUMUL ON F.HISTORCUMUL,W_CleHistorCumul
RETURN

*********************************************************
*********************************************************
11 *

      I=1
      LOOP
       UNTIL ENR_DETAILCALCUL<49,I>="" DO
         * RECHERCHE DANS HISTORCUMUL
	 K=1
	 LOOP 
          UNTIL ENR_HISTORCUMUL<15,K>=ENR_DETAILCALCUL<49,I> OR ENR_HISTORCUMUL<15,K>="" DO
	   K=K+1
	 REPEAT
	 * SI RUB TROUVEE DANS HISTORCUMUL
	 IF ENR_HISTORCUMUL<15,K><>"" THEN
          ENR_HISTORCUMUL<16,K>=ENR_HISTORCUMUL<16,K>+ENR_DETAILCALCUL<50,I>
	 END ELSE
	  ENR_HISTORCUMUL<15,-1>=ENR_DETAILCALCUL<49,I>
	  ENR_HISTORCUMUL<16,-1>=ENR_DETAILCALCUL<50,I>
	  ENR_HISTORCUMUL<17,-1>="0"
	  ENR_HISTORCUMUL<18,-1>="0"
	  ENR_HISTORCUMUL<19,-1>="0"
	 END
         I=I+1
      REPEAT

RETURN

*********************************************************
*********************************************************
* MAJ DES CONGES PAYES

50 *

   W_CLEDETAILCALCUL=W_CODECONTRAT:W_PERIODE

   READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CLEDETAILCALCUL ELSE
	RETURN
   END

   * RECHERCHE DU TYPE DE PERSONNEL (PREST,ADM,MANDAT,INTER)
   IF ENR_CONTRAT<6>="A" THEN
	W_TYPEPERSONNEL=1                                      ;* ADMINISTRATIF
   END ELSE
	IF ENR_CONTRAT<1>="02" THEN
	     W_TYPEPERSONNEL=2                                 ;* MANDATAIRE
	END ELSE
	     * LECTURE ACTIVITE	 
	     READ ENR_ACTIVITE FROM F.ACTIVITE,ENR_CONTRAT<36,1> ELSE
		  STOP
	     END
	     IF ENR_ACTIVITE<12>="P" THEN
		  W_TYPEPERSONNEL=3                            ;* PRESTATAIRE


              *  Controle pour Creation nouveau DetailPrest
              GOSUB 2000

	     END ELSE
		  IF ENR_ACTIVITE<12>="M" THEN
		       W_TYPEPERSONNEL=2		       ;* MANDATAIRE
		  END ELSE
		       W_TYPEPERSONNEL=4		       ;* INTERMEDIAIRE
		  END
	     END
	END
   END   

   I=1
   LOOP
	UNTIL ENR_DETAILCALCUL<2,I>="" DO

        * SI RUB. CONGES PAYES OU ANCIENNETE OU POUR SOLDE OU FRACTIONNEMENT
	BEGIN CASE
  	     CASE ENR_DETAILCALCUL<2,I>="802" OR ENR_DETAILCALCUL<2,I>="803" OR ENR_DETAILCALCUL<2,I>="817"
		  IF W_JOURCONGESCP=0 AND W_JOURCONGESCA=0 AND W_JOURCONGESCF=0 THEN GOSUB 60
	     CASE ENR_DETAILCALCUL<2,I>="804"
		  W_JOURCONGESCPS=1
	END CASE
        I=I+1
   REPEAT

   I=1
   LOOP
	UNTIL ENR_DETAILCALCUL<33,I>="" DO

        * SI RUB. CONGES PAYES OU ANCIENNETE OU POUR SOLDE OU FRACTIONNEMENT
	BEGIN CASE
  	     CASE ENR_DETAILCALCUL<33,I>="802" OR ENR_DETAILCALCUL<33,I>="803" OR ENR_DETAILCALCUL<33,I>="817"
		  IF W_JOURCONGESCP=0 AND W_JOURCONGESCA=0 AND W_JOURCONGESCF=0 THEN GOSUB 60
	     CASE ENR_DETAILCALCUL<33,I>="804"
		  W_JOURCONGESCPS=1
	END CASE
        I=I+1
   REPEAT

   * MAJ DES COMPTEURS
   GOSUB 70

   IF W_TYPEPERSONNEL=1 THEN
      * Suppression du DETAILADMIN (JEROME)
      DELETE F.DETAILADMIN,W_CLEDETAILCALCUL
   END

RETURN

*********************************************************
*********************************************************
* RECHERCHE DU NOMBRE DE JOURS DE CONGES

60 *

   BEGIN CASE 
	CASE W_TYPEPERSONNEL=1
	     READ ENR_DETAILADMIN FROM F.DETAILADMIN,W_CLEDETAILCALCUL ELSE
		  ENR_DETAILADMIN=""
	     END

	     J=1
	     LOOP 
		  UNTIL ENR_DETAILADMIN<1,J>="" DO
		       IF ENR_DETAILADMIN<1,J>="802" THEN
			    IF W_JOURCONGESCP<>ENR_DETAILADMIN<6,J> THEN
			        W_JOURCONGESCP=W_JOURCONGESCP+ENR_DETAILADMIN<6,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
			    END
		       END
		       IF ENR_DETAILADMIN<1,J>="803" THEN
			    IF W_JOURCONGESCA<>ENR_DETAILADMIN<6,J> THEN
			        W_JOURCONGESCA=W_JOURCONGESCA+ENR_DETAILADMIN<6,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
			    END
		       END
		       IF ENR_DETAILADMIN<1,J>="817" THEN
			    IF W_JOURCONGESCF<>ENR_DETAILADMIN<6,J> THEN
			        W_JOURCONGESCF=W_JOURCONGESCF+ENR_DETAILADMIN<6,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
			    END
		       END
		  J=J+1
	     REPEAT

	CASE W_TYPEPERSONNEL=2
	     READ ENR_DETAILMANDAT FROM F.DETAILMANDAT,W_CLEDETAILCALCUL ELSE
		  ENR_DETAILMANDAT=""
	     END

	     J=1
	     LOOP 
		  UNTIL ENR_DETAILMANDAT<1,J>="" DO
		       IF ENR_DETAILMANDAT<1,J>="802" THEN
			    IF W_JOURCONGESCP<>ENR_DETAILMANDAT<6,J> THEN
			        W_JOURCONGESCP=W_JOURCONGESCP+ENR_DETAILMANDAT<6,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
			    END
		       END
		       IF ENR_DETAILMANDAT<1,J>="803" THEN
			    IF W_JOURCONGESCA<>ENR_DETAILMANDAT<6,J> THEN
			        W_JOURCONGESCA=W_JOURCONGESCA+ENR_DETAILMANDAT<6,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
			    END
		       END
		       IF ENR_DETAILMANDAT<1,J>="817" THEN
			    IF W_JOURCONGESCF<>ENR_DETAILMANDAT<6,J> THEN
			        W_JOURCONGESCF=W_JOURCONGESCF+ENR_DETAILMANDAT<6,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
			    END
		       END
		  J=J+1
	     REPEAT

	CASE W_TYPEPERSONNEL=3
	     READ ENR_DETAILPREST FROM F.DETAILPREST,W_CLEDETAILCALCUL ELSE
		  ENR_DETAILPREST=""
	     END

	     J=1
	     LOOP 
		  UNTIL ENR_DETAILPREST<5,J>="" DO
		       IF ENR_DETAILPREST<5,J>="802" THEN
			    IF W_JOURCONGESCP<>ENR_DETAILPREST<14,J> THEN
			        W_JOURCONGESCP=W_JOURCONGESCP+ENR_DETAILPREST<14,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
			    END
		       END
		       IF ENR_DETAILPREST<5,J>="803" THEN
			    IF W_JOURCONGESCA<>ENR_DETAILPREST<14,J> THEN
 			        W_JOURCONGESCA=W_JOURCONGESCA+ENR_DETAILPREST<14,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
			    END
		       END
		       IF ENR_DETAILPREST<5,J>="817" THEN
			    IF W_JOURCONGESCF<>ENR_DETAILPREST<14,J> THEN
 			        W_JOURCONGESCF=W_JOURCONGESCF+ENR_DETAILPREST<14,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
			    END
		       END
		  J=J+1
	     REPEAT

	CASE W_TYPEPERSONNEL=4
	     READ ENR_DETAILINTER FROM F.DETAILINTER,W_CODECONTRAT:W_PERIODE ELSE
		  ENR_DETAILINTER=""
	     END

	     J=1
	     LOOP 
		  UNTIL ENR_DETAILINTER<8,J>="" DO
		       IF ENR_DETAILINTER<8,J>="802" THEN
			    IF W_JOURCONGESCP<>ENR_DETAILINTER<14,J> THEN
 			        W_JOURCONGESCP=W_JOURCONGESCP+ENR_DETAILINTER<14,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
			    END
		       END
		       IF ENR_DETAILINTER<8,J>="803" THEN
			    IF W_JOURCONGESCA<>ENR_DETAILINTER<14,J> THEN
 			        W_JOURCONGESCA=W_JOURCONGESCA+ENR_DETAILINTER<14,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
			    END
		       END
		       IF ENR_DETAILINTER<8,J>="817" THEN
			    IF W_JOURCONGESCF<>ENR_DETAILINTER<14,J> THEN
 			        W_JOURCONGESCF=W_JOURCONGESCF+ENR_DETAILINTER<14,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
			    END
		       END
		  J=J+1
	     REPEAT

   END CASE
   J=1
RETURN
   
*********************************************************
*********************************************************
* MAJ DES COMPTEURS DE CONGES

70 *
   
   * SI PAS CONGES PAYES POUR SOLDE
   IF W_JOURCONGESCPS=0 THEN

       * SI MANDATAIRE ALORS CONGES PRIS EN ATT. 47 DE DETAILCALCUL
       IF ENR_CONTRAT<1>="02" AND ENR_CONTRAT<31>=1 THEN
	   W_JOURCONGESCP=ENR_DETAILCALCUL<47>
       END

       * CONGES PAYES
       IF ENR_CONTRAT<39>-W_JOURCONGESCP>=0 THEN
           ENR_CONTRAT<39>=ENR_CONTRAT<39>-W_JOURCONGESCP
       END ELSE
	   * SI PAS ASSEZ DE DROITS

	   * PRISE SUR CONGES FRACTIONNEMENT
	   W_JOURCONGESCP=W_JOURCONGESCP-ENR_CONTRAT<39>
           ENR_CONTRAT<39>=0

	   IF ENR_CONTRAT<41>-W_JOURCONGESCP>=0 THEN	
		ENR_CONTRAT<41>=ENR_CONTRAT<41>-W_JOURCONGESCP
	   END ELSE

		* PRISE SUR CONGES ANCIENNETE
		W_JOURCONGESCP=W_JOURCONGESCP-ENR_CONTRAT<41>
		ENR_CONTRAT<41>=0

		IF ENR_CONTRAT<48>-W_JOURCONGESCP>=0 THEN
		     ENR_CONTRAT<48>=ENR_CONTRAT<48>-W_JOURCONGESCP
		END ELSE
		     * PRISE PAR ANTICIPATION
 	  	     ENR_CONTRAT<83>=ENR_CONTRAT<83>+(W_JOURCONGESCP-ENR_CONTRAT<48>)
		     ENR_CONTRAT<48>=0
		END
	   END
       END

       * CONGES ANCIENNETE
       IF ENR_CONTRAT<48>-W_JOURCONGESCA>=0 THEN
           ENR_CONTRAT<48>=ENR_CONTRAT<48>-W_JOURCONGESCA
       END ELSE
	   ENR_CONTRAT<83>=ENR_CONTRAT<83>+(W_JOURCONGESCA-ENR_CONTRAT<48>)
           ENR_CONTRAT<48>=0
       END
       * CONGES FRACTIONNEMENT
       IF ENR_CONTRAT<41>-W_JOURCONGESCF>=0 THEN
           ENR_CONTRAT<41>=ENR_CONTRAT<41>-W_JOURCONGESCF
       END ELSE
	   ENR_CONTRAT<83>=ENR_CONTRAT<83>+(W_JOURCONGESCF-ENR_CONTRAT<41>)
           ENR_CONTRAT<41>=0
       END
   END ELSE
       ENR_CONTRAT<38>=0
       ENR_CONTRAT<39>=0
       ENR_CONTRAT<40>=0
       ENR_CONTRAT<41>=0
       ENR_CONTRAT<44>=0
       ENR_CONTRAT<45>=0
       ENR_CONTRAT<46>=0
       ENR_CONTRAT<47>=0
       ENR_CONTRAT<48>=0
       ENR_CONTRAT<85>=0
       ENR_CONTRAT<86>=0
       WRITE ENR_CONTRAT ON F.CONTRAT,W_CODECONTRAT
   END

RETURN

*********************************************************
*********************************************************
* CALCUL DU TAUX HORAIRE + COEFFICIENT

80 *

   * CALCULE DERNIER JOUR PERIODE SUIVANTE
   READ ENR_PERIODESPAIE FROM F.PERIODESPAIE,"1" ELSE
       STOP
   END
   ENR_PERIODESPAIE<2>=ENR_PERIODESPAIE<2>+1
   IF ENR_PERIODESPAIE<2>[5,2]=13 THEN
       ENR_PERIODESPAIE<2>[4,1]=ENR_PERIODESPAIE<2>[4,1]+1
       ENR_PERIODESPAIE<2>=ENR_PERIODESPAIE<2>[1,4]:"01"
   END
  
   W_DERNIERJOURMOISSUIV=ICONV("01/":ENR_PERIODESPAIE<2>[5,2]:"/":ENR_PERIODESPAIE<2>[1,4],"D4/")
   W_DERNIERJOURMOISSUIV=W_DERNIERJOURMOISSUIV-1

   * VERIFIE SI PLUSIEURS AVENANTS DISPONIBLES
   IF ENR_CONTRAT<14,2><>"" THEN
       * RECHERCHE DE L'AVENANT EN COURS
       J=1
       LOOP
	    UNTIL ENR_CONTRAT<15,J+1>>W_DERNIERJOURMOISSUIV OR ENR_CONTRAT<15,J+1>="" DO
	    J=J+1
       REPEAT
   END ELSE
       J=1
   END

   * VERIFIE SI GRILLE DE CLASSIFICATION
   IF ENR_CONTRAT<20,J><>"" THEN
       * LECTURE FICHIER GRILLESCC
       READ ENR_GRILLESCC FROM F.GRILLESCC,ENR_CONTRAT<20,J> ELSE 
	    STOP
       END

       * CALCUL ANCIENNETE DU CONTRAT
       W_DATEDEPARTGRILLECC=OCONV(ENR_CONTRAT<21,J>+ENR_CONTRAT<70>,"D4/")
       W_DATEDEPARTGRILLECC=W_DATEDEPARTGRILLECC[7,4]:W_DATEDEPARTGRILLECC[4,2]
       W_ANCIENNETE=W_PERIODE-W_DATEDEPARTGRILLECC+1
       W_ANCIENNETE=INT(W_ANCIENNETE/100)*100

       * RECHERCHE LA VALEUR ATTRIBUEE A L'ANCIENNETE DU CONTRAT
       W_FINGRILLESCC="FAUX"
       W_TAUXHORCONTRAT=0
       K=1
       LOOP 
	    IF ENR_GRILLESCC<2,K>="" THEN W_FINGRILLESCC="VRAI"
	    UNTIL W_FINGRILLESCC="VRAI" DO

	    * RECHERCHE DU TAUX HORAIRE
	    IF ENR_GRILLESCC<2,K><=W_ANCIENNETE AND W_ANCIENNETE<ENR_GRILLESCC<3,K> THEN
		 W_TAUXHORCONTRAT=ENR_GRILLESCC<4,K>
		 W_FINGRILLESCC="VRAI"
	    END ELSE
		 K=K+1
	    END
       REPEAT

       IF W_TAUXHORCONTRAT<>0 THEN
	    IF ENR_GRILLESCC<5>="C" THEN
                 * RECHERCHE DATE VALEUR POINT
                 A=1
                 LOOP
	              UNTIL ENR_CONVENTIONCOL<9,A><=W_DERNIERJOURMOISSUIV OR ENR_CONVENTIONCOL<9,A>="" DO
                      A=A+1
                 REPEAT

	         IF ENR_CONTRAT<22,J><>W_TAUXHORCONTRAT THEN
		      ENR_CONTRAT<22,J>=W_TAUXHORCONTRAT
   	         END

** AVANT                 IF ENR_CONVENTIONCOL<8,A>#"" THEN ENR_CONTRAT<23,J>=INT((W_TAUXHORCONTRAT/1000)*ENR_CONVENTIONCOL<8,A>*10/169+1/2)

** APRES
      	         READ ENR_ETABLISSEMENT FROM F.ETABLISSEMENT,ENR_CONTRAT<3> ELSE ENR_ETABLISSEMENT<16>="0"
		 W_DUREEHEBDO=INT((ENR_ETABLISSEMENT<16>*52/12)+1/2)/100

		 IF ENR_CONVENTIONCOL<8,A>#"" THEN ENR_CONTRAT<23,J>=INT((W_TAUXHORCONTRAT/1000)*ENR_CONVENTIONCOL<8,A>*10/W_DUREEHEBDO+1/2)
	    END ELSE
		 ENR_CONTRAT<23,J>=W_TAUXHORCONTRAT
	    END
       END             
   END
RETURN

*********************************************************
*********************************************************
* GESTION DES CONGES
* MAJ DES CONGES EN-COURS D'ACQUISITION

100 *
    W_CODEABSENCE=""
    W_REQABSENCESVIDE="FAUX"
    W_TOTALJRSABSMALADIE=0
    W_NBJOURNONINDEM=0
    W_PASABS="VRAI"

    W_MOIS=W_PERIODE[5,2]
    W_ANNEE=W_PERIODE[1,4]

    W_DEBUTPERIODE=ICONV("01/":W_MOIS:"/":W_ANNEE,"D")
    W_MOISFIN=W_PERIODE[5,2]+1
    IF W_MOISFIN>12 THEN
	 W_ANNEEFIN=W_PERIODE[1,4]+1
	 W_MOISFIN="01"
    END ELSE
	 W_ANNEEFIN=W_PERIODE[1,4]
    END

    W_FINPERIODE=ICONV("01/":W_MOISFIN:"/":W_ANNEEFIN,"D4/")
    W_FINPERIODE=W_FINPERIODE-1
    W_FINPERIODE2=OCONV(W_FINPERIODE,"D4/")
    W_FINPERIODE2=W_FINPERIODE2[7,4]:W_FINPERIODE2[4,2]

    EXECUTE 'TSELECT ABSENCESAIDANT AVEC CodAbsAidant = "':W_CODEAIDANT:']" PAR-DECR PeriodeAbsences'
    EXECUTE "SAUVE-LISTE LISTEABSENCESAIDANT"
    EXECUTE "LISTE LISTEABSENCESAIDANT" CAPTURING MSG RETURNING MSGCODE

    IF MSGCODE<1><>209 THEN 
         SELECT F.ABSENCESAIDANT TO LISTEABSENCESAIDANT

         LOOP 
 	     READNEXT CLE FROM LISTEABSENCESAIDANT ELSE
	         W_REQABSENCESVIDE="VRAI"
  	     END
	     UNTIL W_REQABSENCESVIDE="VRAI" DO

	     W_CODEABSENCE=CLE[6,2]
	     W_CLEABSENCE=CLE

	     * LECTURE ABSENCESAIDANT
	     READ ENR_ABSENCESAIDANT FROM F.ABSENCESAIDANT,W_CLEABSENCE ELSE
	         STOP
	     END

	     IF W_CODEABSENCE>="07" AND (CLE[8,5]<=W_FINPERIODE AND ENR_ABSENCESAIDANT<2>>=W_DEBUTPERIODE) THEN
 	       * GESTION DES ABSENCES
	       IF ENR_CONTRAT<31><>1 OR ENR_CONTRAT<1>="02" THEN
                 W_PASABS="FAUX"

                 IF W_JOURCONGESCPS=0 THEN GOSUB 200
	       END
	     END ELSE
	       * GESTION DES ABSENCES
	       IF W_CODEABSENCE<"07" AND (CLE[8,5]<=W_FINPERIODE AND ENR_ABSENCESAIDANT<2>>=W_DEBUTPERIODE) THEN
	         IF ENR_CONTRAT<31><>1 OR ENR_CONTRAT<1>="02" THEN
                   W_PASABS="FAUX"

                   IF W_JOURCONGESCPS=0 THEN GOSUB 200
		 END
 	       END
	     END
         REPEAT

	 IF W_PASABS="VRAI" AND W_JOURCONGESCPS=0 THEN GOSUB 200
    END ELSE
	 IF ENR_CONTRAT<31><>1 OR ENR_CONTRAT<1>="02" THEN
             W_PASABS="VRAI"              
	
     	     IF W_JOURCONGESCPS=0 THEN GOSUB 200
	 END
    END
RETURN   

*********************************************************
*********************************************************
* GESTION DES ABSENCES

200 *

    W_MONTANTARRET=0
    W_ABSENCEMOIS="FAUX"

    IF W_PASABS="FAUX" THEN
       * RECHERCHE SI ABSENCES SUR LE MOIS
       IF W_CLEABSENCE[8,LEN(W_CLEABSENCE)-7]>=W_DEBUTPERIODE AND W_CLEABSENCE[8,LEN(W_CLEABSENCE)-7]<=W_FINPERIODE THEN 
          W_ABSENCEMOIS="VRAI"
       END
       IF W_CLEABSENCE[8,LEN(W_CLEABSENCE)-7]<=W_DEBUTPERIODE THEN 
	   IF ENR_ABSENCESAIDANT<2>>=W_DEBUTPERIODE THEN 
	      W_ABSENCEMOIS="VRAI"
           END    
       END
    END ELSE
       W_ABSENCEMOIS="FAUX"
       W_CODEABSENCE=""
    END

    IF W_ABSENCEMOIS="VRAI" THEN

      BEGIN CASE
	* MALADIE
        CASE W_CODEABSENCE="01"     
	
	  * CALCUL DU NOMBRE DE JOUR AUTORISE PAR CONVENTION
	  GOSUB 300

	  W_NBJOURABSMALADIE=W_NBJOURABS

          * RECUPERATION ATT 17 DE CONV. COL
          READ ENR_CONVENTIONCOL FROM F.CONVENTIONCOL,W_CODECONVENTION ELSE
	    STOP
	  END		

          IF ENR_CONVENTIONCOL<17><>"" THEN
            W_NBSUSPENSION=ENR_CONVENTIONCOL<17>*100
	  END ELSE
	    W_NBSUSPENSION=""
	    GOSUB 310
	  END

          IF W_TOTALJRSABSMALADIE=0 THEN
           GOSUB 302
           W_CUMULJOURMALADIE=W_CUMULMALADIE
          END

          W_TOTALJRSABSMALADIE=W_TOTALJRSABSMALADIE+W_NBJOURABSMALADIE
          W_CUMULJOURMALADIE=W_CUMULJOURMALADIE+W_NBJOURABSMALADIE

          IF W_CUMULJOURMALADIE<=W_NBSUSPENSION THEN
            GOSUB 320	

            * CALCUL SALAIRE DE REFERENCE
	    K=1
	    LOOP
	      UNTIL ENR_ABSENCESAIDANT<17,K>=W_CODECONTRAT OR ENR_ABSENCESAIDANT<17,K>="" DO
	      K=K+1
	    REPEAT

	    * SI PASSAGE A L'EURO + ABS COMMENCE AVANT DATE BUTOIR
	    * ALORS CONVERSION SALAIRE REFERENCE EN EUROS
	    IF W_PASSAGEEURO=1 AND (INT(W_CLEABSENCE[8,LEN(W_CLEABSENCE)-7])<INT(ENR_CONSTANTESPAIE<9>)) THEN
		 ENR_ABSENCESAIDANT<14,K>=INT((ENR_ABSENCESAIDANT<14,K>/W_EURO)+1/2)
	    END

            W_SALREFHRES=(ENR_ABSENCESAIDANT<15,K>/30)*(W_NBJOURABSMALADIE/100)
            W_SALREFMONT=(ENR_ABSENCESAIDANT<14,K>/30)*(W_NBJOURABSMALADIE/100)

            * PRISE DES 10 %
            W_SALREFHRES=W_SALREFHRES*10/100
	    W_SALREFMONT=W_SALREFMONT*10/100

	    IF W_AFFECTCONGESMOIS="FAUX" THEN
	      * RECUPERATION ATTRIBUT 6+7 DETAILCALCUL
 	      READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CODECONTRAT:W_PERIODE ELSE
	        ENR_DETAILCALCUL=""
	        ENR_DETAILCALCUL<6>=0
	        ENR_DETAILCALCUL<7>=0
	        W_NBJOURCONGES=0
	      END

              ENR_CONTRAT<44>=ENR_CONTRAT<44>+W_NBJOURCONGES
              ENR_CONTRAT<45>=ENR_CONTRAT<45>+W_VALEURHEURESJOUR+W_SALREFHRES
              ENR_CONTRAT<46>=ENR_CONTRAT<46>+W_VALEURMONTJOUR+W_SALREFMONT
              W_AFFECTCONGESMOIS="VRAI"
            END ELSE
	      ENR_CONTRAT<45>=ENR_CONTRAT<45>+W_SALREFHRES
	      ENR_CONTRAT<46>=ENR_CONTRAT<46>+W_SALREFMONT
            END
            
 	    ENR_CONTRAT<45>=INT(ENR_CONTRAT<45>+1/2)
            ENR_CONTRAT<46>=INT(ENR_CONTRAT<46>+1/2)
            WRITE ENR_CONTRAT ON F.CONTRAT,W_CODECONTRAT		
	  END ELSE
	    * CALCUL DU NOMBRE DE JOURS A INDEMNISER
	    W_NBJOURINDEM=W_NBSUSPENSION-W_CUMULJOURMALADIE

	    IF W_CUMULJOURMALADIE-W_NBSUSPENSION>=0 THEN
  	        W_NBJOURNONINDEM=W_NBJOURABSMALADIE ;*W_CUMULJOURMALADIE-W_NBSUSPENSION
            END ELSE
                W_NBJOURNONINDEM=0
            END

	    IF W_NBJOURINDEM<0 THEN
	      W_NBJOURINDEM=W_NBJOURINDEM+W_NBJOURABSMALADIE
              W_NBJOURABS=W_NBJOURNONINDEM	
	      W_NBJOURABS2=W_NBJOURABS/100

              GOSUB 3011

	      * ENLEVE LES JRS NON INDEMNISES
	      IF W_PERIODEFACT[5,2]="04" OR W_PERIODEFACT[5,2]="06" OR W_PERIODEFACT[5,2]="09" OR W_PERIODEFACT[5,2]="11" THEN
	           IF W_NBJOURABS2<30 THEN ENR_CONTRAT<44>=ENR_CONTRAT<44>-W_NBJOURCONGES
	      END ELSE
		   IF W_PERIODEFACT[5,2]="02" THEN
	               IF W_NBJOURABS2<28 THEN ENR_CONTRAT<44>=ENR_CONTRAT<44>-W_NBJOURCONGES
		   END ELSE
	               IF W_NBJOURABS2<31 THEN ENR_CONTRAT<44>=ENR_CONTRAT<44>-W_NBJOURCONGES
		   END
	      END
	    END
            ENR_CONTRAT<70>=ENR_CONTRAT<70>+INT(W_NBJOURNONINDEM/100)

	    IF W_NBJOURINDEM>0 THEN
	      W_NBJOURABS=W_NBJOURINDEM

              GOSUB 320

              * CALCUL SALAIRE DE REFERENCE
              K=1
	      LOOP
	        UNTIL ENR_ABSENCESAIDANT<17,K>=W_CODECONTRAT OR ENR_ABSENCESAIDANT<17,K>="" DO
	        K=K+1
	      REPEAT
		
	      * SI PASSAGE A L'EURO + ABS COMMENCE AVANT DATE BUTOIR
	      * ALORS CONVERSION SALAIRE REFERENCE EN EUROS
	      IF W_PASSAGEEURO=1 AND (INT(W_CLEABSENCE[8,LEN(W_CLEABSENCE)-7])<INT(ENR_CONSTANTESPAIE<9>)) THEN
		   ENR_ABSENCESAIDANT<14,K>=INT((ENR_ABSENCESAIDANT<14,K>/W_EURO)+1/2)
  	      END

  	      W_SALREFHRES=(ENR_ABSENCESAIDANT<15,K>/30)*(W_NBJOURABS/100)
  	      W_SALREFMONT=(ENR_ABSENCESAIDANT<14,K>/30)*(W_NBJOURABS/100)

              * PRISE DES 10 %
              W_SALREFHRES=W_SALREFHRES*10/100
	      W_SALREFMONT=W_SALREFMONT*10/100

              IF W_AFFECTCONGESMOIS="FAUX" THEN
                ENR_CONTRAT<44>=ENR_CONTRAT<44>+W_NBJOURCONGES
                ENR_CONTRAT<45>=ENR_CONTRAT<45>+W_VALEURHEURESJOUR+W_SALREFHRES
	        ENR_CONTRAT<46>=ENR_CONTRAT<46>+W_VALEURMONTJOUR+W_SALREFMONT
                W_AFFECTCONGESMOIS="VRAI"
              END ELSE
                ENR_CONTRAT<45>=ENR_CONTRAT<45>+W_SALREFHRES
	        ENR_CONTRAT<46>=ENR_CONTRAT<46>+W_SALREFMONT
              END
	    END ELSE
		GOSUB 320

		IF W_AFFECTCONGESMOIS="FAUX" THEN
	         IF W_PERIODEFACT[5,2]="04" OR W_PERIODEFACT[5,2]="06" OR W_PERIODEFACT[5,2]="09" OR W_PERIODEFACT[5,2]="11" THEN
	           IF W_NBJOURABS2<30 THEN ENR_CONTRAT<44>=ENR_CONTRAT<44>+W_NBJOURCONGES
	         END ELSE
		   IF W_PERIODEFACT[5,2]="02" THEN
	               IF W_NBJOURABS2<28 THEN ENR_CONTRAT<44>=ENR_CONTRAT<44>+W_NBJOURCONGES
		   END ELSE
	               IF W_NBJOURABS2<31 THEN ENR_CONTRAT<44>=ENR_CONTRAT<44>+W_NBJOURCONGES
		   END
	         END
		 W_AFFECTCONGESMOIS="VRAI"
		END
                ENR_CONTRAT<45>=ENR_CONTRAT<45>+W_VALEURHEURESJOUR
	        ENR_CONTRAT<46>=ENR_CONTRAT<46>+W_VALEURMONTJOUR
	    END
            ENR_CONTRAT<45>=INT(ENR_CONTRAT<45>+1/2)
            ENR_CONTRAT<46>=INT(ENR_CONTRAT<46>+1/2)

            WRITE ENR_CONTRAT ON F.CONTRAT,W_CODECONTRAT		
          END
			
          * CONGES SANS SOLDE OU PARENTAL
        CASE W_CODEABSENCE="12" OR W_CODEABSENCE="13"    
		
	  GOSUB 300

          GOSUB 301

          * LECTURE DU CONTRAT EN COURS
          READ ENR_CONTRAT FROM F.CONTRAT,W_CODECONTRAT ELSE
            STOP
          END

	  IF W_CODEABSENCE="12" THEN
  	    * ENLEVE LE NBRE DE JOURS POUR SANS SOLDE
            ENR_CONTRAT<44>=ENR_CONTRAT<44>+W_NBJOURCONGES
            ENR_CONTRAT<45>=ENR_CONTRAT<45>+W_HEURESABSENCES
            ENR_CONTRAT<46>=ENR_CONTRAT<46>+W_MONTANTABSENCES
            W_AFFECTCONGESMOIS="VRAI"  
	  END

          IF W_CODEABSENCE="12" THEN   
            ENR_CONTRAT<70>=ENR_CONTRAT<70>+INT(W_NBJOURABS/100)
          END ELSE
            ENR_CONTRAT<70>=ENR_CONTRAT<70>+INT((W_NBJOURABS*50/100)/100)
	  END

          ENR_CONTRAT<45>=INT(ENR_CONTRAT<45>+1/2)
          ENR_CONTRAT<46>=INT(ENR_CONTRAT<46>+1/2)
          WRITE ENR_CONTRAT ON F.CONTRAT,W_CODECONTRAT
	  
	  * AUTRES SAUF MALADIE <> 01,12,13
        CASE W_CODEABSENCE<>"01" OR W_CODEABSENCE<>"12" OR W_CODEABSENCE<>"13" 
          GOSUB 300

          GOSUB 320

          W_SALREFHRES=0
          W_SALREFMONT=0
	  IF W_CODEABSENCE="02" OR W_CODEABSENCE="04" OR W_CODEABSENCE="05" OR W_CODEABSENCE="06" THEN
  	    * CALCUL SALAIRE DE REFERENCE
  	    K=1
	    LOOP
	      UNTIL ENR_ABSENCESAIDANT<17,K>=W_CODECONTRAT OR ENR_ABSENCESAIDANT<17,K>="" DO
	      K=K+1
	    REPEAT

	    * SI PASSAGE A L'EURO + ABS COMMENCE AVANT DATE BUTOIR
	    * ALORS CONVERSION SALAIRE REFERENCE EN EUROS
	    IF W_PASSAGEEURO=1 AND (INT(W_CLEABSENCE[8,LEN(W_CLEABSENCE)-7])<INT(ENR_CONSTANTESPAIE<9>)) THEN
		 ENR_ABSENCESAIDANT<14,K>=INT((ENR_ABSENCESAIDANT<14,K>/W_EURO)+1/2)
	    END

            W_SALREFHRES=(ENR_ABSENCESAIDANT<15,K>/30)*(W_NBJOURABS/100)
            W_SALREFMONT=(ENR_ABSENCESAIDANT<14,K>/30)*(W_NBJOURABS/100)

            * PRISE DES 10 %
            W_SALREFHRES=INT((W_SALREFHRES*10/100)+1/2)
            W_SALREFMONT=INT((W_SALREFMONT*10/100)+1/2)

            W_VALEURHEURESJOUR=ENR_DETAILCALCUL<6>
	    W_VALEURMONTJOUR=ENR_DETAILCALCUL<7>
	    W_VALEURHEURESJOUR=W_VALEURHEURESJOUR*10/100
	    W_VALEURMONTJOUR=W_VALEURMONTJOUR*10/100
          END
           
          IF W_AFFECTCONGESMOIS="FAUX" THEN
            IF W_VALEURHEURESJOUR=0 THEN W_VALEURHEURESJOUR=ENR_DETAILCALCUL<6>*10/100
	    IF W_VALEURMONTJOUR=0 THEN W_VALEURMONTJOUR=ENR_DETAILCALCUL<7>*10/100

	    ENR_CONTRAT<44>=ENR_CONTRAT<44>+W_NBJOURCONGES
            ENR_CONTRAT<45>=ENR_CONTRAT<45>+W_VALEURHEURESJOUR+W_SALREFHRES
            ENR_CONTRAT<46>=ENR_CONTRAT<46>+W_VALEURMONTJOUR+W_SALREFMONT
            W_AFFECTCONGESMOIS="VRAI"
          END ELSE
            ENR_CONTRAT<45>=ENR_CONTRAT<45>+W_SALREFHRES
            ENR_CONTRAT<46>=ENR_CONTRAT<46>+W_SALREFMONT
          END

          ENR_CONTRAT<45>=INT(ENR_CONTRAT<45>+1/2)
          ENR_CONTRAT<46>=INT(ENR_CONTRAT<46>+1/2)
          WRITE ENR_CONTRAT ON F.CONTRAT,W_CODECONTRAT		
      END CASE       
    END ELSE
      IF W_AFFECTCONGESMOIS="FAUX" AND (W_CODEABSENCE>="07" OR W_CODEABSENCE="0" OR W_CODEABSENCE="") THEN
        IF W_DEBUTCONTRAT<W_DEBUTPERIODE THEN
          W_NBJOURCONGES=250
        END ELSE
          * CALCUL AU PRORATA DES JOURS DE CONGES
          W_NBJOURPRESENT=W_DEBUTCONTRAT-W_DEBUTPERIODE
	  W_NBJOURPRESENT=W_NBJOURPRESENT*100
          W_NBJOURPRESENT=3000-W_NBJOURPRESENT
          W_NBJOURCONGES=250*W_NBJOURPRESENT/3000
          W_NBJOURCONGES=W_NBJOURCONGES+1/2
          W_NBJOURCONGES=INT(W_NBJOURCONGES)
	END

        * RECUPERATION ATTRIBUT 6+7 DETAILCALCUL
        READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CODECONTRAT:W_PERIODE ELSE
	  ENR_DETAILCALCUL=""
          ENR_DETAILCALCUL<6>=0
	  ENR_DETAILCALCUL<7>=0
        END

        W_VALEURHEURESJOUR=ENR_DETAILCALCUL<6>*10/100
        W_VALEURMONTJOUR=ENR_DETAILCALCUL<7>*10/100

        ENR_CONTRAT<44>=ENR_CONTRAT<44>+W_NBJOURCONGES
        ENR_CONTRAT<45>=ENR_CONTRAT<45>+W_VALEURHEURESJOUR
	ENR_CONTRAT<46>=ENR_CONTRAT<46>+W_VALEURMONTJOUR

        ENR_CONTRAT<45>=INT(ENR_CONTRAT<45>+1/2)
        ENR_CONTRAT<46>=INT(ENR_CONTRAT<46>+1/2)

        WRITE ENR_CONTRAT ON F.CONTRAT,W_CODECONTRAT
        W_AFFECTCONGESMOIS="VRAI"		
      END
    END
RETURN	 


*********************************************************
*********************************************************
* CALCUL DU NOMBRE DE JOURS D'ABSENCES (HORS MALADIE)

300 * 

    * DEBUT ABS >= DEBUT MOIS
    IF CLE[8,LEN(CLE)-7]>=W_DEBUTPERIODE THEN
    * FIN ABSENCES <= FIN MOIS
	IF ENR_ABSENCESAIDANT<2><=W_FINPERIODE THEN
  	    W_NBJOURABS=ENR_ABSENCESAIDANT<2>-CLE[8,LEN(CLE)-7]+1
	END ELSE
  	    W_NBJOURABS=W_FINPERIODE-CLE[8,LEN(CLE)-7]+1
	END
    END ELSE
	* FIN ABSENCES <= FIN MOIS
	IF ENR_ABSENCESAIDANT<2><=W_FINPERIODE THEN
  	    W_NBJOURABS=ENR_ABSENCESAIDANT<2>-W_DEBUTPERIODE+1
	END ELSE
  	    W_NBJOURABS=W_FINPERIODE-W_DEBUTPERIODE+1
	END
    END
    W_NBJOURABS=W_NBJOURABS*100

    * DIMINUTION DU NOMBRE DE JOURS SI DEMI-JOURNEE
    IF ENR_ABSENCESAIDANT<1>=2 THEN W_NBJOURABS=W_NBJOURABS-50
    IF ENR_ABSENCESAIDANT<3>=1 THEN W_NBJOURABS=W_NBJOURABS-50

RETURN

*********************************************************
*********************************************************
* CALCUL DES DROITS AUX CONGES (TYPE 12 OU 13)

301 *
 
   * CALCUL AU PRORATA DES JOURS DE CONGES
    W_NBJOURPRESENT=3000-W_NBJOURABS
    IF W_NBJOURPRESENT>3000 THEN W_NBJOURPRESENT=3000
    W_NBJOURCONGES=250*W_NBJOURPRESENT/3000
    W_NBJOURCONGES=W_NBJOURCONGES+1/2
    W_NBJOURCONGES=INT(W_NBJOURCONGES)
	      			
    * RECUPERATION ATTRIBUT 6+7 DETAILCALCUL
	READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CODECONTRAT:W_PERIODE ELSE
	ENR_DETAILCALCUL=""
	ENR_DETAILCALCUL<6>=0
	ENR_DETAILCALCUL<7>=0
    END

    W_HEURESABSENCES=ENR_DETAILCALCUL<6>*10/100
    W_MONTANTABSENCES=ENR_DETAILCALCUL<7>*10/100

RETURN

*********************************************************
*********************************************************
* CALCUL DES DROITS AUX CONGES (TYPE 12 OU 13)

3011 *
 
   * CALCUL AU PRORATA DES JOURS DE CONGES
    W_NBJOURPRESENT=W_NBJOURABS
    IF W_NBJOURPRESENT>3000 THEN W_NBJOURPRESENT=3000
    W_NBJOURCONGES=250*W_NBJOURPRESENT/3000
    W_NBJOURCONGES=W_NBJOURCONGES+1/2
    W_NBJOURCONGES=INT(W_NBJOURCONGES)
	      			
    * RECUPERATION ATTRIBUT 6+7 DETAILCALCUL
	READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CODECONTRAT:W_PERIODE ELSE
	ENR_DETAILCALCUL=""
	ENR_DETAILCALCUL<6>=0
	ENR_DETAILCALCUL<7>=0
    END

    W_HEURESABSENCES=ENR_DETAILCALCUL<6>*10/100
    W_MONTANTABSENCES=ENR_DETAILCALCUL<7>*10/100

RETURN

*********************************************************
*********************************************************
* CALCUL DU NOMBRE CUMULE DE JOURS D'ABSENCES (JUIN->MAI)
* OU JANVIER->DECEMBRE SI ATT.28 CONVENTIONCOL = 1

302 *
    W_CUMULMALADIE=0
    W_REQMALADIEVIDE="FAUX"

    IF ENR_CONVENTIONCOL<28>="0" OR ENR_CONVENTIONCOL<28>="" THEN
      IF W_PERIODE[5,2]>="06" THEN
        W_DEBUTANNEE=ICONV("01/06/":W_PERIODE[1,4],"D4/")
      END ELSE
        W_DEBUTANNEE=ICONV("01/06/":W_PERIODE[1,4]-1,"D4/")
      END
    END ELSE
        W_DEBUTANNEE=ICONV("01/01/":W_PERIODE[1,4],"D4/")
    END
    W_PERIODECOURS=W_DEBUTPERIODE-1   

    IF W_DEBUTANNEE#W_DEBUTPERIODE THEN
      EXECUTE 'TSELECT ABSENCESAIDANT AVEC CodAbsAidant = "':W_CODEAIDANT:']" AND AVEC NumMotifAidant = "01" AND AVEC FinAbsAidant >= "':W_DEBUTANNEE:'" OR = "" AND AVEC DebAbsAidant <= "':W_PERIODECOURS:'" PAR DebAbsAidant'
      EXECUTE "SAUVE-LISTE LISTEMALADIEAIDANT"
      EXECUTE "LISTE LISTEMALADIEAIDANT" CAPTURING MSG RETURNING MSGCODE

      IF MSGCODE<1>=209 THEN W_REQMALADIEVIDE="VRAI"

      IF W_REQMALADIEVIDE="FAUX" THEN
         SELECT F.ABSENCESAIDANT TO LISTEMALADIEAIDANT

         LOOP 
	      READNEXT CLECUM FROM LISTEMALADIEAIDANT ELSE
	          W_REQMALADIEVIDE="VRAI"
     	      END
	      UNTIL W_REQMALADIEVIDE="VRAI" DO

              READ ENR_ABSENCESAIDANTCUM FROM F.ABSENCESAIDANT,CLECUM ELSE ENR_ABSENCESAIDANTCUM=""
	      GOSUB 303
    	      * CUMUL DU NOMBRE DE JOURS DE MALADIE SUR L'ANNEE
	      W_CUMULMALADIE=W_CUMULMALADIE+W_NBJOURABSCUMUL              
	 REPEAT
      END ELSE 
	 W_CUMULMALADIE=0
      END
    END ELSE
      W_CUMULMALADIE=0
    END
 
RETURN

*********************************************************
*********************************************************
* CALCUL DU NOMBRE DE JOURS D'ABSENCES MALADIE

303 * 
    * DEBUT ABS <= 01/06 OU <= 01/01
    IF CLECUM[8,LEN(CLECUM)-7]<=W_DEBUTANNEE THEN
        * FIN ABSENCES <= FIN MOIS
      IF ENR_ABSENCESAIDANTCUM<2>>=W_DEBUTANNEE THEN
	IF ENR_ABSENCESAIDANTCUM<2><=W_PERIODECOURS THEN
            W_NBJOURABSCUMUL=ENR_ABSENCESAIDANTCUM<2>-W_DEBUTANNEE+1
	END ELSE
            W_NBJOURABSCUMUL=W_PERIODECOURS-W_DEBUTANNEE+1
	END
      END
    END ELSE
	* FIN ABSENCES <= FIN MOIS
      IF CLECUM[8,LEN(CLECUM)-7]<=W_PERIODECOURS THEN
	IF ENR_ABSENCESAIDANTCUM<2><=W_PERIODECOURS THEN
  	    W_NBJOURABSCUMUL=ENR_ABSENCESAIDANTCUM<2>-CLECUM[8,LEN(CLECUM)-7]+1
	END ELSE
  	    W_NBJOURABSCUMUL=W_PERIODECOURS-CLECUM[8,LEN(CLECUM)-7]+1
	END
      END
    END
    W_NBJOURABSCUMUL=W_NBJOURABSCUMUL*100

    * DIMINUTION DU NOMBRE DE JOURS SI DEMI-JOURNEE
    IF ENR_ABSENCESAIDANTCUM<1>=2 THEN W_NBJOURABSCUMUL=W_NBJOURABSCUMUL-50
    IF ENR_ABSENCESAIDANTCUM<3>=1 THEN W_NBJOURABSCUMUL=W_NBJOURABSCUMUL-50

RETURN

*********************************************************
*********************************************************
* CALCUL DES DROITS AUX CONGES (MALADIE)

310 *
 
   * CALCUL AU PRORATA DES JOURS DE CONGES
    W_NBJOURPRESENT=3000-W_NBJOURABSMALADIE
    IF W_NBJOURPRESENT<0 THEN W_NBJOURPRESENT=0
    W_NBJOURCONGES=250*W_NBJOURPRESENT/3000
    W_NBJOURCONGES=W_NBJOURCONGES+1/2
    W_NBJOURCONGES=INT(W_NBJOURCONGES)    		
	
    * RECUPERATION ATTRIBUT 6+7 DETAILCALCUL
	READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CODECONTRAT:W_PERIODE ELSE
	ENR_DETAILCALCUL=""
	ENR_DETAILCALCUL<6>=0
	ENR_DETAILCALCUL<7>=0
    END

    W_HEURESABSENCES=ENR_DETAILCALCUL<6>*10/100
    W_MONTANTABSENCES=ENR_DETAILCALCUL<7>*10/100

RETURN

*********************************************************
*********************************************************
* CALCUL DES DROITS AUX CONGES <> 01,12,13

320 *

    IF W_DEBUTCONTRAT<W_DEBUTPERIODE THEN
         W_NBJOURPRESENT=3000
         W_NBJOURCONGES=250
    END ELSE
         * CALCUL AU PRORATA DES JOURS DE CONGES
         W_NBJOURPRESENT=W_DEBUTCONTRAT-W_DEBUTPERIODE
         W_NBJOURPRESENT=W_NBJOURPRESENT*100
         IF W_NBJOURPRESENT>3000 THEN W_NBJOURPRESENT=3000
	 W_NBJOURPRESENT=3000-W_NBJOURPRESENT
         W_NBJOURCONGES=250*W_NBJOURPRESENT/3000
         W_NBJOURCONGES=W_NBJOURCONGES+1/2
         W_NBJOURCONGES=INT(W_NBJOURCONGES)   
    END

    * LECTURE DETAILCALCUL
    READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CODECONTRAT:W_PERIODE ELSE
	 ENR_DETAILCALCUL=""
	 ENR_DETAILCALCUL<6>=0
	 ENR_DETAILCALCUL<7>=0
    END

    * RECHERCHE DES RUBRIQUES 807 - 808
    J=1
    LOOP 
	 UNTIL ENR_DETAILCALCUL<2,J>="" DO
			
	 * SI RUB 807 - 808, CALCULE LE MONTANT DE L'ARRET
	 IF ENR_DETAILCALCUL<2,J>="807" OR ENR_DETAILCALCUL<2,J>="808" THEN
 	      W_MONTANTARRET=W_MONTANTARRET+ENR_DETAILCALCUL<5,J>
         END

	 J=J+1
    REPEAT		  

    * SI W_MONTANTARRET <> 0 
    IF W_MONTANTARRET<>0 THEN
	 W_BRUTARRET=ENR_DETAILCALCUL<7>-W_MONTANTARRET
	 W_HEURESARRET=ENR_DETAILCALCUL<6>
    END ELSE
	 W_BRUTARRET=ENR_DETAILCALCUL<7>
	 W_HEURESARRET=ENR_DETAILCALCUL<6>
    END	 

    W_SORTIE="FAUX"
    W_VALEURHEURESJOUR=INT((W_HEURESARRET*10/100)+1/2)
    W_VALEURMONTJOUR=INT((W_BRUTARRET*10/100)+1/2)  

RETURN


*********************************************************
*********************************************************
* GESTION DE BASCULEMENT DES COMPTEURS

500 *

    * TEST DE LA PERIODE EN COURS

    * BASCULEMENT COMPTEUR
    READ ENR_CONVENTIONCOL FROM F.CONVENTIONCOL,W_CODECONVENTION ELSE
   	 STOP
    END

    * LECTURE CONTRAT EN COURS
    READ ENR_CONTRAT FROM F.CONTRAT,W_CODECONTRAT ELSE
         STOP
    END

    W_DATEDEBUTCONTRAT=OCONV(W_DEBUTCONTRAT,"D4/")
    W_DATEDEBUTCONTRAT=W_DATEDEBUTCONTRAT[7,4]:W_DATEDEBUTCONTRAT[4,2]
    IF W_DEBUTCONTRATANC<>"" THEN
         W_DATEDEBUTCONTRATANC=OCONV(W_DEBUTCONTRATANC,"D4/")
         W_DATEDEBUTCONTRATANC=W_DATEDEBUTCONTRATANC[7,4]:W_DATEDEBUTCONTRATANC[4,2]
    END ELSE
	 W_DATEDEBUTCONTRATANC=W_DATEDEBUTCONTRAT
    END

    * REGARDE SI PERIODE = DATE DE DEBUT CONTRAT - 1 MOIS
    IF W_DATEDEBUTCONTRATANC[5,2]<>"01" THEN 
	 W_DATEDEBUTCONTRATANC=W_DATEDEBUTCONTRATANC-1
    END ELSE
	 W_DATEDEBUTCONTRATANC=W_DATEDEBUTCONTRATANC[1,4]-1:"12"
    END

    W_DATEDEBUTCONTRATANCCLAIR="01/":W_DATEDEBUTCONTRATANC[5,2]:"/":W_DATEDEBUTCONTRATANC[1,4]

    IF ENR_CONVENTIONCOL<28>="0" OR ENR_CONVENTIONCOL<28>="" THEN
      IF W_PERIODE[5,2]="05" THEN    

         * GESTION DU BASCULEMENT DES CONGES 
	 GOSUB 600

	 * VERIFICATION SI BASCULEMENT CONGES ANCIENNETE EN MAI
	 IF ENR_CONVENTIONCOL<13>=1 THEN
	      GOSUB 700
	 END
      END
    END ELSE
      IF W_PERIODE[5,2]="12" THEN    

         * GESTION DU BASCULEMENT DES CONGES 
	 GOSUB 600

	 * VERIFICATION SI BASCULEMENT CONGES ANCIENNETE EN JANVIER
	 IF ENR_CONVENTIONCOL<13>=1 THEN
	      GOSUB 700
	 END
      END
    END
    * VERIFICATION SI BASCULEMENT CONGES ANCIENNETE MOIS ANNIVERSAIRE
    IF ENR_CONVENTIONCOL<13>=2 THEN

	 IF W_DATEDEBUTCONTRATANC[5,2]=W_PERIODE[5,2] THEN
	      GOSUB 700
	 END	
    END         

    IF W_PERIODE[5,2]="10" AND ENR_CONVENTIONCOL<4>=1 THEN

	 * GESTION DES CONGES DE FRACTIONNEMENT
	 GOSUB 800
 
    END

    WRITE ENR_CONTRAT ON F.CONTRAT,W_CODECONTRAT    

RETURN
	
*********************************************************
*********************************************************
* GESTION DE BASCULEMENT DES COMPTEURS DE CONGES PAYES

600 *

    W_NBJOURCONGESTOTAL=ENR_CONTRAT<44>

    * ARRONDI LE NBRE DE JOURS CONGES A L'ENTIER SUPERIEUR    
    IF W_NBJOURCONGESTOTAL<>0 THEN
	 W_NBJOURCONGESTOTAL=INT((ENR_CONTRAT<44>/100)+.99)
    END
    W_NBJOURCONGESTOTAL=W_NBJOURCONGESTOTAL*100

    * CALCULE LA VALEUR D'UNE JOURNEE EN HRES + MONTANT
    W_VALEURTOTALHEURES=ENR_CONTRAT<45>/W_NBJOURCONGESTOTAL
    W_VALEURTOTALMONTANT=ENR_CONTRAT<46>/W_NBJOURCONGESTOTAL

    W_VALEURTOTALHEURES=INT((W_VALEURTOTALHEURES*100)+1/2)
    W_VALEURTOTALMONTANT=INT((W_VALEURTOTALMONTANT*100)+1/2)

    * TEST SI DERNIERE DECIMALES PAIRES DE TOTAL HEURES
    IF W_VALEURTOTALHEURES/2-INT(W_VALEURTOTALHEURES/2)<>0 THEN
	 W_VALEURTOTALHEURES=W_VALEURTOTALHEURES+1
    END
    * TEST SI DERNIERE DECIMALES PAIRES DE TOTAL MONTANT
    IF W_VALEURTOTALMONTANT/2-INT(W_VALEURTOTALMONTANT/2)<>0 THEN
	 W_VALEURTOTALMONTANT=W_VALEURTOTALMONTANT+1
    END

    * AFFECTATION VALEUR D'UNE JOURNEE
    ENR_CONTRAT<42>=W_VALEURTOTALHEURES
    ENR_CONTRAT<43>=W_VALEURTOTALMONTANT

    * CONVERSION OUVRABLES / OUVRES SI CONV. COL. LE PERMET
    IF ENR_CONVENTIONCOL<2>=1 THEN
	 ENR_CONTRAT<44>=ENR_CONTRAT<44>*5/6
    END

    * REPRISE DES NON CONSOMMES SI CONV. COL. LE PERMET
    IF ENR_CONVENTIONCOL<3>=2 THEN
	 ENR_CONTRAT<38>=ENR_CONTRAT<44>+ENR_CONTRAT<39>
    END ELSE 
	 ENR_CONTRAT<38>=ENR_CONTRAT<44>
	 * REMISE A ZERO DES CONGES FRACTIONNEMENT
	 ENR_CONTRAT<40>=0
	 ENR_CONTRAT<41>=0
    END

    ENR_CONTRAT<38>=INT((ENR_CONTRAT<38>+99)/100)

    * CONGES RESTANTS A CONSOMMER
    ENR_CONTRAT<39>=(ENR_CONTRAT<38>*100)-ENR_CONTRAT<83>

    * BASCULE PROVISION EMPLOYEUR
    IF ENR_CONVENTIONCOL<3>=2 THEN
         ENR_CONTRAT<85>=ENR_CONTRAT<85>+ENR_CONTRAT<86>
    END ELSE
	 ENR_CONTRAT<85>=ENR_CONTRAT<86>
    END

    * TEST SUR DROITS ACQUIS >= 0
    IF ENR_CONTRAT<38><0 THEN ENR_CONTRAT<38>=0
    IF ENR_CONTRAT<39><0 THEN ENR_CONTRAT<39>=0
    IF ENR_CONTRAT<85><0 THEN ENR_CONTRAT<85>=0
    IF ENR_CONTRAT<42><0 THEN ENR_CONTRAT<42>=0
    IF ENR_CONTRAT<43><0 THEN ENR_CONTRAT<43>=0

    * SI CONGES PAYES AU MOIS ALORS MET A 0 VALEUR JOURNEE EN HRES ET MONTANT
    IF ENR_CONTRAT<31>="1" THEN 
	 ENR_CONTRAT<42>=0
	 ENR_CONTRAT<43>=0
    END

    * VIDAGE CONTRAT
    ENR_CONTRAT<44>=0
    ENR_CONTRAT<45>=0
    ENR_CONTRAT<46>=0
    ENR_CONTRAT<83>=0
    ENR_CONTRAT<86>=0

RETURN

*********************************************************
*********************************************************
* GESTION DE BASCULEMENT DES COMPTEURS DE CONGES ANCIENNETE

700 *

    * CALCUL DE L'ANCIENNETE DU CONTRAT
    W_DATECLOTURE=W_PERIODE+1

    * SI DATE CLOTURE > DECEMBRE
    IF W_DATECLOTURE[5,2]=13 THEN
	 W_DATECLOTURE=W_DATECLOTURE[1,4]+1:"01"
    END

    IF W_DATECLOTURE>"200003" AND W_CODECONVENTION="02" THEN W_DATECLOTURE="200003"

    W_ANCIENNETE=INT(W_DATECLOTURE-W_DATEDEBUTCONTRATANC)/100

    BEGIN CASE

         * EMPLOYES DE MAISON OU AIDE A DOMICLIE
	 CASE W_CODECONVENTION="02" OR W_CODECONVENTION="01" OR W_CODECONVENTION="08"		
	      * BLOCAGE ANCIENNETE DANS CCN 02 SI DEBUT CONTRAT >= 01/04/00
	      IF ICONV(W_DATEDEBUTCONTRATANCCLAIR,"D4/")>="11780" AND W_CODECONVENTION="02" THEN
		   W_NBJOURANCIEN=0
	      END ELSE 
		   * GESTION HABITUELLE DES C.A
                   W_NBJOURANCIEN=INT(W_ANCIENNETE/5)
                   IF W_NBJOURANCIEN>4 THEN	
		        W_NBJOURANCIEN=4
	           END
	      END

         * FAMILLES RURALES
	 CASE W_CODECONVENTION="04"		
              W_NBJOURANCIEN=INT(W_ANCIENNETE/4)
              IF W_NBJOURANCIEN>5 THEN	
		   W_NBJOURANCIEN=5
	      END

         * TRAVAILLEUSES FAMILLIALES
	 CASE W_CODECONVENTION="06"		
              W_NBJOURANCIEN=INT(W_ANCIENNETE/5)*2
              IF W_NBJOURANCIEN>6 THEN	
		   W_NBJOURANCIEN=6
	      END

         * ADMR DU 6 MAI 1970
	 CASE W_CODECONVENTION="03"	
	      W_NBJOURANCIEN=0	
	      IF W_ANCIENNETE>=5 AND W_ANCIENNETE<10 THEN
	           W_NBJOURANCIEN=2
	      END ELSE
		   IF W_ANCIENNETE>=10 THEN
  		        W_NBJOURANCIEN=5
	           END
              END

    END CASE

    ENR_CONTRAT<47>=W_NBJOURANCIEN
    ENR_CONTRAT<48>=ENR_CONTRAT<47>*100

RETURN

*********************************************************
*********************************************************
* GESTION DE BASCULEMENT DES COMPTEURS DE CONGES FRACTIONNEMENT

800 *

    W_NBJOURFRACT=0

    * CALCUL DU NOMBRE DE JOURS DE CONGES RESTANTS
    IF ENR_CONVENTIONCOL<2>=1 THEN
         W_NBJOURCONGESRESTANT=ENR_CONTRAT<39>*6/5        
    END ELSE
         W_NBJOURCONGESRESTANT=ENR_CONTRAT<39>
    END

    W_NBJOURCONGESRESTANT=W_NBJOURCONGESRESTANT/100

    BEGIN CASE

 	 * TOUTES SAUF AIDE A DOMICILE + FONCTION PUBLIQUE
	 CASE W_CODECONVENTION<>"01" AND W_CODECONVENTION <> "07"
              IF W_NBJOURCONGESRESTANT>=12 THEN
		   W_NBJOURFRACT=2
	      END ELSE
		   IF W_NBJOURCONGESRESTANT>=9 THEN
			W_NBJOURFRACT=1
		   END
	      END

	 * FONCTION PUBLIQUE
	 CASE W_CODECONVENTION="07" 
              IF W_NBJOURCONGESRESTANT>=13 THEN
		   W_NBJOURFRACT=2
	      END ELSE
		   IF W_NBJOURCONGESRESTANT>=10 THEN
			W_NBJOURFRACT=1
		   END
	      END
		
	 * AIDE A DOMICILE
	 CASE W_CODECONVENTION="01"
              IF W_NBJOURCONGESRESTANT>=12 THEN
		   W_NBJOURFRACT=3
	      END ELSE
		   IF W_NBJOURCONGESRESTANT>=9 THEN
			W_NBJOURFRACT=1
		   END
	      END

    END CASE

    IF ENR_CONVENTIONCOL<3>=2 THEN
        ENR_CONTRAT<40>=ENR_CONTRAT<40>+W_NBJOURFRACT
        ENR_CONTRAT<41>=ENR_CONTRAT<41>+W_NBJOURFRACT*100
    END ELSE        
	ENR_CONTRAT<40>=W_NBJOURFRACT
        ENR_CONTRAT<41>=W_NBJOURFRACT*100
    END

RETURN

*********************************************************
*********************************************************
* GESTION DES EFFECTIFS

900 *

    GOSUB 901

    W_Mois=W_PERIODEFACT[5,2]+1
    W_An=W_PERIODEFACT[1,4]
    IF W_Mois="13" THEN
       W_Mois="01"
       W_An=W_PERIODEFACT[1,4]+1
    END

    W_DateFinPeriode=ICONV("01/":W_Mois:"/":W_An,"D4/")-1

    IF (ENR_CONTRAT<7> <= W_DateFinPeriode AND ENR_CONTRAT<8> > W_DateFinPeriode) OR (ENR_CONTRAT<7> <= W_DateFinPeriode AND ENR_CONTRAT<8> = "") THEN
       W_EFFECTIFPHYSIQUE<I>=W_EFFECTIFPHYSIQUE<I>+100
    END

    READ ENR_ETABLISSEMENT FROM F.ETABLISSEMENT,ENR_CONTRAT<3> ELSE
	 STOP
    END

    * RECUPERE L'HORAIRE HEBDO LEGAL => MENSUEL
    W_HORAIREHEBDO<I>=ENR_ETABLISSEMENT<16>*52/12

    * LECTURE DETAILCALCUL POUR RECUPERER LES HEURES EFFECTUEES SUR LE MOIS
    READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CODECONTRAT:W_PERIODE ELSE
	 ENR_DETAILCALCUL=""
**	 RETURN
    END

    W_HEURESPAYEES=ENR_DETAILCALCUL<6>

**    IF W_HEURESPAYEES>=(W_HORAIREHEBDO<I>*4/5) THEN 
**	 W_EFFECTIFTP<I>=W_EFFECTIFTP<I>+100
**    END ELSE
	 W_HORAIRETP<I>=W_HORAIRETP<I>+W_HEURESPAYEES
**    END

**    W_EFFECTIFTP<I>=W_EFFECTIFTP<I>+INT((W_HORAIRETP<I>/W_HORAIREHEBDO)*100+1/2)
**    W_EFFECTIFTP<I>=W_EFFECTIFTP<I>+INT((W_HEURESPAYEES/W_HORAIREHEBDO)*100+1/2)
RETURN

*********************************************************
*********************************************************
* RECHERCHE SI ETABLISSEMENT DEJA TRAITE

901 * 

    I=1
    LOOP 
	 UNTIL W_ETABLISSEMENT<I>=ENR_CONTRAT<3> OR W_ETABLISSEMENT<I>="" DO
         I=I+1
    REPEAT

    IF W_ETABLISSEMENT<I>="" THEN
	 W_ETABLISSEMENT<I>=ENR_CONTRAT<3>
         W_NBETABLISSEMENT=I
    END

RETURN

*********************************************************
*********************************************************
* MAJ DU FICHIER ETABLISSEMENT

910 *

    FOR I=1 TO W_NBETABLISSEMENT    

	 * LECTURE ETABLISSEMENT
	 READ ENR_ETABLISSEMENT FROM F.ETABLISSEMENT,W_ETABLISSEMENT<I> ELSE
	      STOP
	 END

	 IF ENR_ETABLISSEMENT<19,1><>W_PERIODE THEN
 	      ENR_ETABLISSEMENT=INSERT(ENR_ETABLISSEMENT,17,1;W_EFFECTIFPHYSIQUE<I>)
	      ENR_ETABLISSEMENT=INSERT(ENR_ETABLISSEMENT,18,1;W_EFFECTIFTP<I>)
	      ENR_ETABLISSEMENT=INSERT(ENR_ETABLISSEMENT,19,1;W_FINPERIODE2)
	 END ELSE
 	      ENR_ETABLISSEMENT<17,1>=ENR_ETABLISSEMENT<17,1>+W_EFFECTIFPHYSIQUE<I>
 	      ENR_ETABLISSEMENT<18,1>=ENR_ETABLISSEMENT<18,1>+W_EFFECTIFTP<I>
	 END

 	 W_EFFECTIFPHYSIQUETOTAL=W_EFFECTIFPHYSIQUETOTAL+W_EFFECTIFPHYSIQUE<I>
	 W_EFFECTIFTPTOTAL=W_EFFECTIFTPTOTAL+W_EFFECTIFTP<I>

	 WRITE ENR_ETABLISSEMENT ON F.ETABLISSEMENT,W_ETABLISSEMENT<I>

    NEXT I

RETURN

*********************************************************
*********************************************************
* MAJ DU FICHIER ASSOCIATION

920 *

    * LECTURE ASSOCIATION
    READ ENR_ASSOCIATION FROM F.ASSOCIATION,W_ASSOCIATION ELSE
	 STOP
    END

    IF ENR_ASSOCIATION<29,1><>W_PERIODE THEN
 	 ENR_ASSOCIATION=INSERT(ENR_ASSOCIATION,27,1;W_EFFECTIFPHYSIQUETOTAL)
	 ENR_ASSOCIATION=INSERT(ENR_ASSOCIATION,28,1;W_EFFECTIFTPTOTAL)
	 ENR_ASSOCIATION=INSERT(ENR_ASSOCIATION,29,1;W_FINPERIODE2)
    END ELSE
 	 ENR_ASSOCIATION<27,1>=ENR_ASSOCIATION<27,1>+W_EFFECTIFPHYSIQUETOTAL
 	 ENR_ASSOCIATION<28,1>=ENR_ASSOCIATION<28,1>+W_EFFECTIFTPTOTAL
    END

    WRITE ENR_ASSOCIATION ON F.ASSOCIATION,W_ASSOCIATION

RETURN


*********************************************************
*********************************************************
* Controle pour Cration ventuelle d'un nouveau DETAILPREST

2000 *

	* RECUPERATION ATT 23 DE CONV. COL
	READ ENR_CONVENTIONCOL FROM F.CONVENTIONCOL,W_CODECONVENTION ELSE
	     STOP
	END		

	* Rcapitulatif mensuel
	W_RECAPMENS=ENR_CONVENTIONCOL<23>

	* Controle personnel type Production
	* NORMALLEMENT SI ARRIVE ICI, OBLIGATOIREMENT TYPE P
	GOSUB 2050

	* Controle Premire Activit type PRESTATAIRE
	* SI ARRIVE LA, OBLIGATOIREMENT TYPE PRESTATAIRE (voir Procdure 50 qui appelle la procdure en cours)
	* Si tous les critres sont bon, cration du DtailPrest
	IF W_RECAPMENS=1 AND W_INDICFINCONT=1 THEN
		GOSUB 2001
	END

RETURN


*********************************************************
*********************************************************
* Cration ventuelle d'un nouveau DETAILPREST

2001 *

	READ ENR_DETAILPREST FROM F.DETAILPREST,W_CLEDETAILCALCUL ELSE
		ENR_DETAILPREST=""
	END

        * 06/02/02 : VERIFIE SI GESTION D'UNE SAISIE DETAILLEE
        *            -> SI OUI : NE GENERE PAS DE DETAILPREST POUR LE MOIS SUIVANT
        *            -> SI NON : GENERE 1 DETAILPREST POUR LE MOIS SUIVANT

	W_PERIODESUIV=W_PERIODE+1

	IF W_PERIODESUIV[5,2]="13" THEN
		W_PERIODESUIV=W_PERIODESUIV[1,4]+1:"01"
	END

	W_NBRUB = DCOUNT(ENR_DETAILPREST<3>,CHAR(253))

	IF W_NBRUB >0 THEN
		FOR IRUB=1 TO W_NBRUB
			* TESTE SI SAISIE DETAILLEE OU PAS
			IF ENR_DETAILPREST<2,IRUB>#"" THEN
				* CAS OU PAS SAISIE DETAILLEE
				ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,3,IRUB;"000")	
			END ELSE
				* CAS OU SAISIE DETAILLEE ALORS SUPP DES MV CORRESPONDANTES
				ENR_DETAILPREST=DELETE(ENR_DETAILPREST,1,IRUB)
				ENR_DETAILPREST=DELETE(ENR_DETAILPREST,2,IRUB)
				ENR_DETAILPREST=DELETE(ENR_DETAILPREST,3,IRUB)
				ENR_DETAILPREST=DELETE(ENR_DETAILPREST,4,IRUB)
				W_NBRUB=W_NBRUB-1
				IRUB=IRUB-1
			END
		NEXT IRUB
	END

	ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,5;"")
	ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,6;"")
	ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,7;"")
	ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,8;"")
	ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,9;"")
	ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,10;"")
	ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,11;"")
	ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,12;"")
	ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,13;"")
	ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,14;"")
	ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,15;"")

        WRITE ENR_DETAILPREST ON F.DETAILPREST,W_CLEDETAILCALCUL[1,8]:W_PERIODESUIV

RETURN


*********************************************************
*********************************************************
* purge ANOMALIEPAIE + ACOMPTEBULL
2200 *
   EXECUTE 'TSELECT ANOMALIEPAIE AVEC 0 = "':W_PERIODE:']"'
   EXECUTE 'SAUVE-LISTE LISTANOMALIEPAIE'
   EXECUTE 'LISTE LISTANOMALIEPAIE ' CAPTURING MSG RETURNING MSGCODE

   IF MSGCODE<1><>209 THEN 
       SELECT F.ANOMALIEPAIE TO LISTANOMALIEPAIE 

       W_Fini="FAUX"
       LOOP
            READNEXT W_CleDetail FROM LISTANOMALIEPAIE ELSE W_Fini="VRAI"
            WHILE W_Fini="FAUX" DO
            DELETE F.ANOMALIEPAIE,W_CleDetail
       REPEAT
   END

   EXECUTE 'TSELECT ACOMPTEBULL AVEC 0 = "':W_PERIODE:']"'
   EXECUTE 'SAUVE-LISTE LISTACOMPTEBULL'
   EXECUTE 'LISTE LISTACOMPTEBULL' CAPTURING MSG RETURNING MSGCODE

   IF MSGCODE<1><>209 THEN 
       SELECT F.ACOMPTEBULL TO LISTACOMPTEBULL

       W_Fini="FAUX"
       LOOP
            READNEXT W_CleDetail FROM LISTACOMPTEBULL ELSE W_Fini="VRAI"
            WHILE W_Fini="FAUX" DO
            DELETE F.ACOMPTEBULL,W_CleDetail
       REPEAT
   END
RETURN

*********************************************************
*********************************************************
* Purge des DetailPrest, DetailMandat, DetailInter

2010 *


   W_PERIODE=W_PERIODE-2

   IF W_PERIODE[5,2]="00" THEN
   	W_PERIODE=W_PERIODE[1,4]-1:"12"
   END ELSE
	IF W_PERIODE[5,2]="99" THEN
        	W_PERIODE=W_PERIODE[1,4]-1:"11"
	END
   END

   EXECUTE 'TSELECT DETAILPREST AVEC PeriodeDetailPrest < "':W_PERIODE:'"'
   EXECUTE 'SAUVE-LISTE REQUETEDETAIL'
   EXECUTE 'LISTE REQUETEDETAIL' CAPTURING MSG RETURNING MSGCODE

   IF MSGCODE<1><>209 THEN 
       SELECT F.DETAILPREST TO REQUETEDETAIL

       W_Fini="FAUX"
       LOOP
            READNEXT W_CleDetail FROM REQUETEDETAIL ELSE W_Fini="VRAI"
            WHILE W_Fini="FAUX" DO
            DELETE F.DETAILPREST,W_CleDetail
       REPEAT
   END

   EXECUTE 'TSELECT DETAILFEDE AVEC 0 < "[':W_PERIODE:'"'
   EXECUTE 'SAUVE-LISTE REQUETEDETAIL'
   EXECUTE 'LISTE REQUETEDETAIL' CAPTURING MSG RETURNING MSGCODE

   IF MSGCODE<1><>209 THEN 
       SELECT F.DETAILFEDE TO REQUETEDETAIL

       W_Fini="FAUX"
       LOOP
            READNEXT W_CleDetail FROM REQUETEDETAIL ELSE W_Fini="VRAI"
            WHILE W_Fini="FAUX" DO
            DELETE F.DETAILFEDE,W_CleDetail
       REPEAT
   END

   EXECUTE 'TSELECT DETAILMANDAT AVEC PeriodeDetailMandat < "':W_PERIODE:'"'
   EXECUTE 'SAUVE-LISTE REQUETEDETAIL'
   EXECUTE 'LISTE REQUETEDETAIL' CAPTURING MSG RETURNING MSGCODE

   IF MSGCODE<1><>209 THEN 
       SELECT F.DETAILMANDAT TO REQUETEDETAIL

       W_Fini="FAUX"
       LOOP
   	    READNEXT W_CleDetail FROM REQUETEDETAIL ELSE W_Fini="VRAI"
            WHILE W_Fini="FAUX" DO
            DELETE F.DETAILMANDAT,W_CleDetail
       REPEAT
   END

   EXECUTE 'TSELECT DETAILINTER AVEC PeriodeDetailInter < "':W_PERIODE:'"'
   EXECUTE 'SAUVE-LISTE REQUETEDETAIL'
   EXECUTE 'LISTE REQUETEDETAIL' CAPTURING MSG RETURNING MSGCODE

   IF MSGCODE<1><>209 THEN 
       SELECT F.DETAILINTER TO REQUETEDETAIL

       W_Fini="FAUX"
       LOOP
   	    READNEXT W_CleDetail FROM REQUETEDETAIL ELSE W_Fini="VRAI"
            WHILE W_Fini="FAUX" DO
            DELETE F.DETAILINTER,W_CleDetail
       REPEAT
   END

   EXECUTE "EFFACER-LISTE REQUETEDETAIL"
RETURN


************************************
* Controle fin contrat sur priode *
************************************
2050
	
	IF ENR_CONTRAT<8> = "" THEN
		W_INDICFINCONT=1
	END ELSE
		W_INDICFINCONT=OCONV(ENR_CONTRAT<8>,"D4/")
            	W_INDICFINCONT=W_INDICFINCONT[7,4]:W_INDICFINCONT[4,2]
		IF W_INDICFINCONT=W_PERIODE THEN
			W_INDICFINCONT=0
		END ELSE
			W_INDICFINCONT=1
		END
		IF ENR_CONTRAT<58>=W_PERIODE THEN W_INDICFINCONT=0
	END
RETURN


**************************************
* CONTROLE SI CREATION DE DETAILXXXX *
**************************************
2100

	GOSUB 2050

	IF W_INDICFINCONT=1 THEN
		BEGIN CASE
			CASE W_TYPEPERSONNEL MATCHES "1"
				* ADMINISTRATIF
				GOSUB 2101
			CASE W_TYPEPERSONNEL MATCHES "2"
				* MANDATAIRE
				GOSUB 2102
			CASE W_TYPEPERSONNEL MATCHES "3"
				* PRESTATAIRE
				GOSUB 2103
			CASE W_TYPEPERSONNEL MATCHES "4"
				* INTERMEDIAIRE
				GOSUB 2104
		END CASE
	END

RETURN

************************
* CREATION DETAILADMIN *
************************
2101
        ENR_DETAILADMIN=""
        D=1
        LOOP
         UNTIL ENR_CONTRAT<89,D>="" DO
 	  ENR_DETAILADMIN<1,D>=ENR_CONTRAT<89,D>
	  ENR_DETAILADMIN<2,D>=ENR_CONTRAT<90,D>
	  ENR_DETAILADMIN<3,D>=ENR_CONTRAT<91,D>
	  ENR_DETAILADMIN<4,D>=ENR_CONTRAT<92,D>
	  ENR_DETAILADMIN<5,D>="NON"
	  ENR_DETAILADMIN<6,D>="0"
	  ENR_DETAILADMIN<7,D>="0"
          D=D+1
        REPEAT
        IF D#1 THEN
         FOR C=1 TO D-1
          ENR_DETAILADMIN<6,C>=""
          ENR_DETAILADMIN<7,C>=""
         NEXT C
        END

	IF ENR_DETAILADMIN<1><>"" THEN WRITE ENR_DETAILADMIN ON F.DETAILADMIN,W_CleContrat:W_PROCHAINEPERIODE 

RETURN


*************************
* CREATION DETAILMANDAT *
*************************
2102

	ENR_DETAILMANDAT=""
	ENR_DETAILMANDAT<1>=ENR_CONTRAT<89>
	ENR_DETAILMANDAT<2>=ENR_CONTRAT<90>
	ENR_DETAILMANDAT<3>=ENR_CONTRAT<91>
	ENR_DETAILMANDAT<4>=ENR_CONTRAT<92>
	ENR_DETAILMANDAT<5>=ENR_CONTRAT<93>
	ENR_DETAILMANDAT<6>=""
	ENR_DETAILMANDAT<7>=""
	
	IF ENR_DETAILMANDAT<1><>"" THEN WRITE ENR_DETAILMANDAT ON F.DETAILMANDAT,W_CleContrat:W_PROCHAINEPERIODE 

RETURN


************************
* CREATION DETAILPREST *
************************
2103

	READ ENR_DETAILPREST FROM F.DETAILPREST,W_CleContrat:W_PROCHAINEPERIODE ELSE ENR_DETAILPREST=""

	ENR_DETAILPREST<5>=ENR_CONTRAT<89>
	ENR_DETAILPREST<6>=ENR_CONTRAT<90>
	ENR_DETAILPREST<7>=ENR_CONTRAT<91>
	ENR_DETAILPREST<8>=ENR_CONTRAT<92>
	ENR_DETAILPREST<9>=ENR_CONTRAT<93>
	
	IF ENR_DETAILPREST<5><>"" THEN WRITE ENR_DETAILPREST ON F.DETAILPREST,W_CleContrat:W_PROCHAINEPERIODE 

RETURN

************************
* CREATION DETAILINTER *
************************
2104
	ENR_DETAILINTER<8>=ENR_CONTRAT<89>
	ENR_DETAILINTER<9>=ENR_CONTRAT<90>
	ENR_DETAILINTER<10>=ENR_CONTRAT<91>
	ENR_DETAILINTER<11>=ENR_CONTRAT<92>
	ENR_DETAILINTER<12>=ENR_CONTRAT<93>
	ENR_DETAILINTER<13>=""
	ENR_DETAILINTER<14>=""
	
	IF ENR_DETAILINTER<8><>"" THEN WRITE ENR_DETAILINTER ON F.DETAILINTER,W_CleContrat:W_PROCHAINEPERIODE 

RETURN
